1

もう一方の端がパイプで ReadFile を正常に呼び出したときに戻る関数はありますか。名前付きパイプで通信する2つのアプリケーションがあり、1つはWriteFileを使用してパイプでリクエストを送信し、応答を期待してReadFileを呼び出します。問題は、相手側がまだパイプからリクエストを削除していないため、アプリケーションが自身のリクエストを回答として読み取っていることです。

そのような機能はありますか?

別の方法として、2 つの単方向パイプを使用するか、他のアプリケーションがメッセージを受信したときに送信者に信号を送ることで何らかの種類または同期を実装することを知っていますが、より簡単な方法があるかどうかを確認しています...

4

2 に答える 2

1

あなたが探しているメソッドはPeekNamedPipeだと思います。この関数を使用すると、データを削除せずにパイプを見ることができます。これを使用して、送信したばかりのメッセージがまだパイプにあるかどうかを確認できます。もしそうなら、もう一方の端はまだメッセージを読んでいません。

全体としては、信号または 2 つの単方向パイプを使用する方がよいと思います。双方向通信に適しています。

于 2009-10-13T22:25:43.760 に答える
0

あなたの設計は本質的に競合状態になりやすいので、代わりに 2 つのパイプを使用することをお勧めします。特に、2 つのプロセスが同じパイプに書き込みたい場合に何が起こるか考えたことがありますか?

つまり、イベントを使用して同期できる可能性があります。WriteFile() の処理が完了したら、イベントが通知されるのを待つことができます。もう一方の端が ReadFile() で完了すると、SetEvent()を実行できます。両端が明確に定義されたコントラクトを持ち、互いに競合したり、互いにデッドロックしたりしない限り、それは機能する可能性があります。

于 2009-10-13T22:30:34.463 に答える