2012-03-27 12 views
1

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

この場合、ファイルハンドルがIOCPに関連付けられているとどうなりますか?私はまだこの要求に対してIO完了パケットを受け取るのでしょうか、要求は完全に同期して実行されますか?

もしそうなら、私はReadFile呼び出し全体をワーカースレッドに入れなければなりません。最初にReadFile呼び出しを発行するスレッドはブロックできません。理由は私がIOCPを検討しているのは、ReadFile呼び出しをワーカースレッドに入れることは、ReadFileの直後にブロックするワーカースレッドへのコンテキスト切り替えを意味するからです。

答えて

2

ERROR_SUCCESSで完了するか、または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で完了する操作は完了パケットを生成せず、重複した操作を発行した時点で完了処理を行う必要があります。

関連する問題