1

根据http://support.microsoft.com/kb/156932,如果满足某些条件,对 ReadFile 的调用可能会出现同步。例如,如果目标文件是 NTFS 压缩的。这篇文章没有说明如果文件句柄与 IOCP 关联会发生什么。

那么当文件句柄与 IOCP 关联时,在这种情况下会发生什么?我是否仍会收到此请求的 IO 完成数据包,还是该请求会完全同步执行?

如果是这样,我必须将整个 ReadFile 调用放在一个工作线程中。最初发出 ReadFile 调用的线程不允许阻塞。我考虑 IOCP 的原因是因为将 ReadFile 调用放入工作线程意味着上下文切换到工作线程,然后在 ReadFile 之后立即阻塞。

4

1 回答 1

3

ERROR_SUCCESS任何以OR with完成的重叠操作ERROR_IO_PENDING都将生成一个完成数据包。请参阅此知识库文章的技巧 4

这假设您尚未FILE_SKIP_COMPLETION_PORT_ON_SUCCESS使用SetFileCompletionNotificationModes()启用相关句柄。如果您已启用FILE_SKIP_COMPLETION_PORT_ON_SUCCESS,则完成的操作ERROR_SUCCESS将不会生成完成数据包,您应该在发出重叠操作的位置进行完成处理。

于 2012-03-27T11:54:53.677 回答