私のパイプの1つが読み込まれるまでブロックする必要があります。ウィンドウ上のパイプのselectと同等
私はWaitForMultipleObjectsを試しましたが、ただパイプの1つにデータがあるとすぐに返します。パイプブロック上の次のReadFile。
私はデータが利用できるようになるまでブロックする必要があるため、PeekNamedPipeを使用することはできません。また、スリープのループでピークを検出すると、スリープにより反応が遅くなります。
このコードはクロスプラットフォームであり、私はfifoのfdのセットでSelectを使用して、選択したときに準備ができているものから読み取ることができるため、Linux上ですべてうまく動作しますが、窓に
多くの人が読んだり書いたりして重複した操作を使わなければならないと言ってきましたが、これはループしてすべてのパイプを試してみる必要はありませんか?
パイプの1つにデータがあるまでブロッキング操作がブロックされていませんか?
"私はWaitForMultipleObjectsを試しました" - あなたの問題を解決しようとしたときに書いたコードが適切だと思うなら、あなたは正しいです。それはあなたの問題を再現する可能性のある最小限の、しかし理想的には完全な例として取り除かれています。 WaitForMultipleObjectsを間違って使用していることがわかっているため、その前提を否定するコードは掲載されていません。そして、はい、重複またはiocpは私がおそらくこれを行う方法です。 – WhozCraig
@EJPいい神! 1993年は火の発明より前か? – user4581301
もっと重大な点として、WaitForSingleObjectはWAIT_OBJECT_0 + nを返します.nはシグナルされた配列インデックスのインデックスです。ドキュメンテーションに明記されているので、実際に戻り値をチェックしていないので、 'WaitForSingleObject'の呼び出しは実際には' WAIT_FAILED'を返しています。実際に何をしているのかわからないので、これはビジネス上の推測として知られています。戻り値を正しくチェックし、エラーをきれいに処理するコードを書いているかもしれません。 – theB