Win32 IO完成端口和同步出现的IO会发生什么?

时间:2012-03-27 11:41:27

标签: io synchronous readfile iocp

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

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

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

1 个答案:

答案 0 :(得分:2)

使用ERROR_SUCCESS OR与ERROR_IO_PENDING完成的任何重叠操作都将生成完成数据包。请参阅tip 4 of this knowledge base article

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