微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 IOCP 异步读取文件?

如何解决如何使用 IOCP 异步读取文件?

我遇到了一个实施问题。我对如何实现 IOCP 感到困惑。我在互联网上阅读了很多关于它的内容,但仍然缺少一步。 到目前为止,我所学到的如下: 为了使用 IOCP:

  1. 在初始化函数上:
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
  1. 在读取功能上,我可以这样做:
ReadFile(...,&Overlapped); // this will return error == ERROR_IO_PENDING which is what I want - asynch read
  1. 现在我很难理解接下来的步骤。我是否应该在 ReadFile 之后生成一个线程并在该线程内等待直到 GetQueuedCompletionStatus 为真?

解决方法

所以我的问题的答案在这里:

https://stackoverflow.com/a/680416/2788176

用非常简单(有点过于简化)的术语来说,你告诉 关于您想要完成的 IO 作业的 IOCP。它将执行它们 异步并维护每个结果的队列 工作。您告诉 IOCP 有关工作的电话立即返回(它 IO 发生时不会阻塞)。您将返回一个对象 在概念上就像 .NET IAsyncResult ...它可以让你阻止 您选择,或者您可以提供回调,或者您可以定期 轮询以查看作业是否完成。

IOCP 实现可以在 windows SDK 中找到。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。