如何解决如何使用 IOCP 异步读取文件?
我遇到了一个实施问题。我对如何实现 IOCP 感到困惑。我在互联网上阅读了很多关于它的内容,但仍然缺少一步。 到目前为止,我所学到的如下: 为了使用 IOCP:
- 在初始化函数上:
CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0); // to have a max thread number available
handler = CreateFile(filename,GENERIC_READ | GENERIC_WRITE,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
CreateIoCompletionPort(handler,0); // to associate my handler with an IOCP
- 在读取功能上,我可以这样做:
ReadFile(...,&Overlapped); // this will return error == ERROR_IO_PENDING which is what I want - asynch read
解决方法
所以我的问题的答案在这里:
https://stackoverflow.com/a/680416/2788176
用非常简单(有点过于简化)的术语来说,你告诉 关于您想要完成的 IO 作业的 IOCP。它将执行它们 异步并维护每个结果的队列 工作。您告诉 IOCP 有关工作的电话立即返回(它 IO 发生时不会阻塞)。您将返回一个对象 在概念上就像 .NET IAsyncResult ...它可以让你阻止 您选择,或者您可以提供回调,或者您可以定期 轮询以查看作业是否完成。
IOCP 实现可以在 windows SDK 中找到。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。