読取りモードを同期入出力でPIPE_READMODE_MESSAGEに設定してパイプを読み取るときに、メッセージが完全に読み取られたかどうかを判断するのは非常に簡単です。 (戻りERROR_MORE_DATA)のReadFile関数はFALSEを返し、のGetLastError(場合は、メッセージが不完全であると、後続の読み取りすることを完全なメッセージを取得するために必要であることを意味する。)次にオーバーラップI/Oの名前付きパイプから読み取るときにメッセージが完全に読み取られたときを判断することはできますか?
、名前付きパイプで動作する場合代わりに、I/O重ねて読み出し動作が保留されている(のReadFile関数はFALSEとのGetLastErrorを返します()戻りERROR_IO_PENDING)、私は操作が完了し、完全なメッセージを取得した場合、私はどのように知っていますか?私が決定できるのは、GetOverlappedResult関数を呼び出すことによって実際に転送されたバイト数ですが、完全なメッセージが読み取られたかどうかはわかりません。
私はここに何か不足していますか?
あなたはあなたのパイプiocpをバインドすることができます。例えば、 'BindIoCompletionCallback'を介してコールバックで状態を取得できます。またはそれを自分のiocpにバインドすると、 'GetQueuedCompletionStatus'を呼び出すと操作ステータスが取得されます。 – RbMm
私は意図的にこれを間違えたことはありませんが、私は購入していません。確かにGetOverlappedResultからERROR_MORE_DATAが得られます。あなたのバージョンを私達に見せなければなりません。 –
* GetOverlappedResult関数ですが、完全なメッセージが読み込まれたかどうかはわかりません。*実際にはあなたに* false *を返し、 'GetLastError()'はメッセージが不完全な場合は 'ERROR_MORE_DATA'を返します。それが真実を返すなら、すべてが大丈夫です。 – RbMm