ホームページ >よくある問題 >スレッド間の通信方法は何ですか?

スレッド間の通信方法は何ですか?

不言
不言オリジナル
2019-04-08 13:59:1151674ブラウズ

スレッド間の通信方法は何ですか?

スレッド間の通信方法には次のものがあります:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。