スレッド間の通信方法には次のものがあります:
1. メッセージ キューが最も一般的に使用されます。最も柔軟性が高く、複雑なデータ構造と単純なデータ構造をカスタム データ構造を通じて転送できます。
Windows プログラミングでは、各スレッドが独自のメッセージ キューを持つことができます (UI スレッドにはデフォルトで独自のメッセージ キューとメッセージ ループがあり、ワーカー スレッドはメッセージ ループを手動で実装する必要があります)。スレッド間通信に使用されます。
メッセージの定義#define WM_THREAD_SENDMSG=WM_USER 20;
メッセージ関数宣言の追加 afx_msg int OnTSendmsg();
メッセージ マッピング ON_MESSAGE(WM_THREAD_SENDMSG,OnTSM) の追加
OnTSM() の実装関数を追加します;
スレッド関数に PostMessage メッセージのポスト関数を追加します
2. グローバル変数を使用します
プロセス内のスレッドメモリ共有は、一般的な通信方法および対話方法です。
注: グローバル変数を定義するときは、コンパイラがこの変数を最適化しないように volatile を使用することをお勧めします。
3. イベント CEvent クラスを使用してスレッド間通信を実装します
イベント オブジェクトには、シグナルありとシグナルなしの 2 つの状態があります。スレッドはシグナル状態のイベントを監視できるため、イベントを監視できます。適切なタイミングで検出され、イベントに対する操作を実行します。
1) CEvent クラスのオブジェクトを作成します: CEvent threadStart; デフォルトでは非通信状態にあります;
2) threadStart.SetEvent(); を使用して通信状態にしますstate;
3) WaitForSingleObject() を呼び出して CEvent オブジェクトを監視します
以上がスレッド間の通信方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。