two からの入力をブロックするアプリケーションを作成していますistreams
。
どちらからistream
の読み取りも同期 (ブロッキング) 呼び出しであるため、Boost::thread
読み取りを行うために 2 つの を作成することにしました。
これらのスレッドのいずれかが (受信した入力に基づいて) 「終了」に達することができ、「終了」に達すると、両方の入力ストリームの受信が停止します。残念ながら、どちらがそうするかはわかりません。
したがって、join()
実際に返される (ブロック解除される) スレッドは 1 つだけ (どのスレッドかを事前に決定することはできません) であるため、両方のスレッドを使用することはできません。
どうにかしてもう一方を強制的に終了させる必要がありますが、入力を待ってブロックされているため、戻る時間だと判断できません(条件変数かどうか)。
次のいずれかへの方法はありますか?
- boost::thread にシグナルを送信する、または
- 強制的
istream
に「失敗」させる、または - Boost::thread を殺す?
ノート:
- その一つ
istreams
がcin
- プロセスを再起動しようとしているため、リセットを禁止する方法で入力ストリームを閉じることはできません。
編集:
- 「終わり」に達したとき、どのスレッドが正常に終了したか、どのスレッドを強制終了する必要があるかを知っています。それは私が理解する必要がある殺害です(またはistreamから読み取るための別の戦略)。
- 終了して適切にクリーンアップするには、両方のスレッドが必要です:(
ありがとう!