2012-03-27 69 views
1

根據http://support.microsoft.com/kb/156932如果滿足某些條件,對ReadFile的調用可以同步顯示。例如,如果目標文件是NTFS壓縮的。文章沒有提到如果文件句柄與IOCP相關會發生什麼。Win32 IO完成端口和同步出現的IO會發生什麼?

那麼當文件句柄與IOCP關聯時,在這種情況下會發生什麼?我仍然會收到這個請求的IO完成數據包,還是請求執行完全同步?

如果是這樣,我必須將整個ReadFile調用放入工作線程中。最初發出ReadFile調用的線程不允許被阻塞。我正在考慮IOCP的原因是因爲將ReadFile調用放入工作線程意味着上下文切換到工作線程,然後在ReadFile之後立即阻塞。

回答

2

任何與ERROR_SUCCESSERROR_IO_PENDING完成的重疊操作將生成完成數據包。見tip 4 of this knowledge base article

這假定您尚未在相關手柄上啓用FILE_SKIP_COMPLETION_PORT_ON_SUCCESS,使用SetFileCompletionNotificationModes()。如果您已啓用FILE_SKIP_COMPLETION_PORT_ON_SUCCESS,則使用ERROR_SUCCESS完成的操作不會生成完成數據包,您應該在發出重疊操作的位置執行完成處理。