2011-06-21 13 views
0

async_receive_fromを使用してマルチキャスト入力を読み取っています。だから私はギャップを検出すると、ギャップ充填メッセージを要求/取得するために別のヘルパースレッドに通知します。これが動作している間、メインスレッドは受信メッセージを受信して​​キューに入れ続けます。私はこの部分を実装することができます。もう1つのスレッドはwaitforsingleobjectを使うことができます。共有メモリを介して詳細を渡して、イベントを起こして目を覚ますことができます。別のスレッドからboost :: asio :: async_receive_fromを中断する

しかし、タスクが完了したら、開始スレッドでasync_receive_fromを中断するヘルパースレッドを取得するにはどうすればよいですか?読んだところから出てくると誰が中断したのか分かるので、次に何をすべきかを知るでしょう。

+0

あなたの設計は不必要に複雑に聞こえますが、より良い回答を得るには、なぜヘルパースレッドと共有メモリを使用しているのかを明確にする必要があります。これらのコンセプトの両方は、asioを使用するときには幾分奇妙です。 –

答えて

1

なぜスレッド間で共有メモリを使用していますか?

それ以外に、ソケットを管理しているio_serviceのコンテキストで何かを実行するために使用すべきメカニズムはpost()です。 io_serviceに任意のイベントを投稿することができ、それはそのコンテキストで実行されます。非常に簡単です... async_receive_fromを呼び出しているため、ブロックされていません。つまり、io_serviceが他のイベントを送信できるため、postが機能します。

+0

+1 post()はここでもお勧めします。 –

+0

私はそれを試しましたが、投稿された(ディスパッチされた)関数が完了するまで、async_receive_fromが処理されないようです。ポストが開始され、asyn_receive_fromが入力された後もアプリケーションは続行されますが、ディスパッチされた関数が完了するまでブロックされているようです。基本的には、ポスティング機能とポストされた機能が同時に実行され、ブロックされないようにする必要があります。 –

+0

Nimあなたの提案に私のコメントを参照してください。ありがとう –

関連する問題