2016-11-18 7 views
0

どのワーカースレッドから別のワーカースレッドにシグナルを送信できますか?最初のスレッドは、シグナルを受け取った後、2番目のスレッドからのシグナルを待つことになります。最初のスレッドは自分のジョブを実行します。どのように実装できますか?MFC内の2つの子スレッド間で信号を送信

+2

'PostThreadMessage()'は片道です。 –

+2

'WaitForSingleObject'、' SetEvent' –

+0

@JoeWillcoxson:なぜPostThreadMessageによってポストされたメッセージが消えるのですか?](https://blogs.msdn.microsoft.com/oldnewthing/20090930-00/?p=16553)さらに、チャンスは反対方向にも同期したいと思うので、 'SendThreadMessage'と同等のものを探しています([存在しない](https://blogs.msdn.microsoft.com/oldnewthing/20081223- 00/p = 19743))。 – IInspectable

答えて

0

「信号を送信する」とは、(Windows)メッセージを送信するという意味ではないと思います。本当に単純なものの実装が複雑すぎます。あなたの(2番目の)ワーカースレッドはメッセージループを作成し、(カスタム)メッセージをチェックする必要がありますか?非常に残酷。ワーカースレッドはもちろんメッセージループを作成できますが、これはまれです。

これは適切なオブジェクトタイプで、「イベント」(シグナル状態または非シグナル状態のいずれかになることができる単純なオブジェクト)です。 2番目のスレッドはこれを待つ必要があり、1番目のスレッドは2番目にジョブを実行するよう通知するためにシグナル状態に設定する必要があります(これは「シグナル送信」に相当します)。

+0

* "ワーカースレッドはもちろんメッセージループを作成できますが、これはまれです" * - いいえ、実際はありません。 ** **は非常に一般的です。 STAのみと互換性のあるCOMオブジェクトをホストするすべてのワーカースレッドは、メッセージループを実行します。実際には、STAに初期化されている任意の(ワーカー)スレッドはメッセージループを持つ必要があります。メッセージの受け渡しによる同期は非常に一般的です。 – IInspectable

関連する問題