根据http://support.microsoft.com/kb/156932,如果满足某些条件,对ReadFile的调用可以显示为同步。例如,如果目标文件是NTFS压缩的。如果文件句柄与IOCP相关联,本文没有说明会发生什么。
那么在这种情况下,当文件句柄与IOCP相关联时会发生什么?我是否仍会收到此请求的IO完成数据包,或者请求是否完全同步?
如果是这样,我必须将整个ReadFile调用放在工作线程中。最初发出ReadFile调用的线程不允许阻塞。我考虑IOCP的原因是因为将ReadFile调用放入工作线程意味着上下文切换到工作线程,然后在ReadFile之后立即阻塞。
答案 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
完成的操作将不会生成完成数据包,您应该在发出重叠操作的位置执行完成处理。