1

http://support.microsoft.com/kb/156932によると、特定の条件が満たされた場合、ReadFile の呼び出しは同期しているように見えます。たとえば、ターゲット ファイルが NTFS で圧縮されている場合です。この記事では、ファイル ハンドルが IOCP に関連付けられている場合に何が起こるかについては何も述べていません。

この場合、ファイル ハンドルが IOCP に関連付けられている場合はどうなるでしょうか。このリクエストの IO 完了パケットを引き続き受信しますか、それともリクエストは完全に同期して実行されますか?

その場合、ReadFile 呼び出し全体をワーカー スレッドに配置する必要があります。最初に ReadFile 呼び出しを発行するスレッドはブロックできません。IOCP を検討している理由は、ReadFile 呼び出しをワーカー スレッドに入れることは、ReadFile の直後にブロックするワーカー スレッドへのコンテキスト スイッチを意味するためです。

4

1 に答える 1

3

ERROR_SUCCESSOR で完了する重複操作はERROR_IO_PENDING、完了パケットを生成します。このナレッジ ベース記事のヒント 4 を参照してください。

これは、 SetFileCompletionNotificationModes()FILE_SKIP_COMPLETION_PORT_ON_SUCCESSを使用して、問題のハンドルを有効にしていないことを前提としています。有効にした場合、完了した操作は完了パケットを生成しないため、オーバーラップした操作を発行した時点で完了処理を行う必要があります。FILE_SKIP_COMPLETION_PORT_ON_SUCCESSERROR_SUCCESS

于 2012-03-27T11:54:53.677 に答える