【问题标题】:What happens with Win32 IO Completion Port and synchronous appearing IO?Win32 IO 完成端口和同步出现的 IO 会发生什么?
【发布时间】:2012-03-27 11:41:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: io synchronous readfile iocp


    【解决方案1】:

    任何以ERROR_SUCCESSERROR_IO_PENDING 完成的重叠操作都将生成一个完成数据包。见tip 4 of this knowledge base article

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

    【讨论】:

      猜你喜欢
      • 2021-08-05
      • 1970-01-01
      • 2018-05-22
      • 2014-02-20
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      相关资源
      最近更新 更多