ホームページ よくある問題 スレッド間の通信のいくつかの方法

スレッド間の通信のいくつかの方法

Jul 01, 2020 pm 02:00 PM

スレッド間通信の方法には次のものが含まれます: 1. グローバル変数、共通の通信方法および対話方法であるプロセス内のスレッド間のメモリ共有、2. メッセージ メッセージ メカニズム、3. CEvent オブジェクト、CEvent はMFC のオブジェクトは、CEvent のトリガー ステータスを変更することでスレッド間の通信を実現できます。

スレッド間の通信のいくつかの方法

#マルチスレッド通信には主に 3 つの方法があります:

1. グローバル変数

プロセス内のスレッド間でのメモリ共有は、一般的な通信方法および対話方法です。

注: グローバル変数を定義するときは、コンパイラがこの変数を最適化しないように volatile を使用することをお勧めします。

2. メッセージ メッセージ メカニズム

一般的に使用されるメッセージ通信には、PostMessage と PostThreadMessage という 2 つの主要なインターフェイスがあります。

PostMessage は、メッセージを送信するスレッドです。メインウィンドウに移動し、メッセージを送信します。 PostThreadMessage は、2 つのスレッド間の通信インターフェイスです。

2.1.PostMessage()

関数プロトタイプ:

B00L PostMessage (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);

パラメータ:

hWnd: ウィンドウ プログラムがメッセージを受信するウィンドウのハンドル。特定の意味を持つ 2 つの値が使用可能です:

HWND.BROADCAST: メッセージは、無効または非所有のウィンドウや上書きされたウィンドウを含む、システムのすべてのトップレベル ウィンドウに送信されます

およびポップアップウィンドウ。メッセージは子ウィンドウには送信されません。

NULL: この関数の動作は、現在のスレッドの識別子に設定されたパラメーター dwThread を使用して PostThreadMessage 関数を呼び出すことと同じです。

Msg: 送信するメッセージを指定します。

wParam: 追加のメッセージ固有の情報を指定します。

IParam: 追加のメッセージ固有の情報を指定します。

戻り値: 関数呼び出しが成功した場合、戻り値は 0 以外です。関数呼び出しが失敗した場合、戻り値は 0 です。

MS には、メッセージ間の通信用の SendMessage メソッド SendMessage() も用意されています。これと PostMessage の違いは、

SendMessage は同期であるのに対し、PostMessage は非同期です。 SendMessage は、送信されたメッセージが実行されるまで待ってから戻る必要があります。

2.2.PostThreadMessage()

PostThreadMessage メソッドは、指定されたスレッドにメッセージを送信できます。

関数プロトタイプ: BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);

パラメータは、ThreadId を除き、基本的に PostMessage と同じです。

ターゲット スレッドは、GetMessage() メソッドを通じてメッセージを受信します。

注: この方法を使用する場合、ターゲット スレッドには独自のメッセージ キューがすでに存在している必要があります。それ以外の場合は、ERROR_INVALID_THREAD_ID エラーが返されます。

PeekMessage() を使用して、スレッドのメッセージ キューを作成できます。

3. CEvent オブジェクト

CEvent は MFC のオブジェクトであり、CEvent のトリガー状態を変更して、スレッド間の通信と同期を実現できます。

以上がスレッド間の通信のいくつかの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

8コア16スレッドとはどういう意味ですか? 8コア16スレッドとはどういう意味ですか? Feb 02, 2023 am 11:26 AM

8 コアは、CPU に 8 つの物理コアがあることを意味し、16 スレッドは、CPU が同時にタスクを処理できる最大 16 のスレッドを持つことができることを意味します。コアとスレッドの数は、コンピュータ CPU の重要なパフォーマンス指標です。CPU のコア数が多いほど、処理速度は高くなります。スレッドの数が多いほど、複数のプログラムを同時に実行しやすくなります。スレッドの数は、ある瞬間に CPU が同時に実行できる数、つまり並列処理されるタスクの数に相当するためです。マルチスレッドにより、広範囲にわたる問題の順序が狂ったスーパースカラー処理を最大化し、プロセッサ コンピューティング コンポーネントの利用率を向上させ、データ相関やキャッシュ ミスによって引き起こされるメモリ アクセスの遅延を軽減できます。

C++ 同時プログラミング: スレッドの枯渇と優先順位の逆転を回避するには? C++ 同時プログラミング: スレッドの枯渇と優先順位の逆転を回避するには? May 06, 2024 pm 05:27 PM

スレッドの枯渇を回避するには、公平なロックを使用してリソースの公平な割り当てを確保するか、スレッドの優先順位を設定します。優先順位の逆転を解決するには、リソースを保持しているスレッドの優先順位を一時的に高める優先順位の継承を使用するか、リソースを必要とするスレッドの優先順位を高めるロック プロモーションを使用します。

C++ 同時プログラミング: スレッドの終了とキャンセルを行うには? C++ 同時プログラミング: スレッドの終了とキャンセルを行うには? May 06, 2024 pm 02:12 PM

C++ のスレッド終了およびキャンセル メカニズムには次のものがあります。 スレッド終了: std::thread::join() は、ターゲット スレッドが実行を完了するまで現在のスレッドをブロックします。 std::thread::detach() は、ターゲット スレッドをスレッド管理から切り離します。スレッドのキャンセル: std::thread::request_termination() はターゲット スレッドに実行の終了を要求します。 std::thread::get_id() はターゲット スレッド ID を取得し、std::terminate() とともに使用してターゲットを即座に終了できます。糸。実際の戦闘では、request_termination() によってスレッドが終了のタイミングを決定でき、join() によってメインラインでそれが保証されます。

プログラム実行時の命令フローの最小単位は何ですか? プログラム実行時の命令フローの最小単位は何ですか? Aug 23, 2022 pm 02:16 PM

「スレッド」とは、プログラムを実行する際の命令の流れの最小単位です。プロセスは特定の独立した機能を持つプログラムを指し、スレッドはプロセスの一部であり、命令フローの実行状態を記述します。スレッドはプロセス内の命令実行フローの最小単位であり、基本単位です。 CPU のスケジューリング。スレッドはタスク (プログラムセグメント) の実行プロセスであり、メモリ空間を占有せず、プロセスのメモリ空間に含まれます。同じプロセス内では、複数のスレッドがプロセスのリソースを共有し、プロセスには少なくとも 1 つのスレッドがあります。

Go言語のコルーチンとスレッドの違いは何ですか Go言語のコルーチンとスレッドの違いは何ですか Feb 02, 2023 pm 06:10 PM

違い: 1. スレッドは複数のコルーチンを持つことができ、プロセスは複数のコルーチンを単独で持つこともできます; 2. スレッドは同期メカニズムですが、コルーチンは非同期です; 3. コルーチンは最後の呼び出しの状態を保持できますが、スレッドは機能しません; 4. スレッドはプリエンプティブですが、コルーチンは非プリエンプティブです; 5. スレッドは分割された CPU リソースであり、コルーチンは組織化されたコード プロセスです コルーチンはホストして実行するためにスレッドを必要とします。

Java エラー: JavaFX スレッドスタックエラー、対処方法と回避方法 Java エラー: JavaFX スレッドスタックエラー、対処方法と回避方法 Jun 24, 2023 pm 05:52 PM

JavaFX アプリケーションの開発中に、JavaFX スレッドスタックエラーが頻繁に発生します。このようなエラーは重大度が異なり、プログラムの安定性やパフォーマンスに悪影響を与える可能性があります。プログラムが正常に動作することを保証するには、JavaFX スレッドスタックエラーの原因と解決策、およびこのエラーの発生を防ぐ方法を理解する必要があります。 1. JavaFX スレッドスタックエラーの原因 JavaFX はマルチスレッド UI アプリケーション フレームワークであり、バックグラウンド スレッドでプログラムを長時間実行できます。

Go言語におけるスレッドとプロセスの違いの分析 Go言語におけるスレッドとプロセスの違いの分析 Apr 03, 2024 pm 01:39 PM

Go 言語のプロセスとスレッド: プロセス: 独自のリソースとアドレス空間を持つ独立して実行されるプログラム インスタンス。スレッド: プロセス リソースとアドレス空間を共有するプロセス内の実行ユニット。特徴: プロセス: 高いオーバーヘッド、良好な分離、独立したスケジューリング。スレッド: 低いオーバーヘッド、共有リソース、内部スケジューリング。実際のケース: プロセス: 長時間実行されるタスクを分離します。スレッド: 大量のデータを同時に処理します。

MicrosoftはAIを活用したCopilotをWindows上のOutlookクラシックアプリに導入する計画 MicrosoftはAIを活用したCopilotをWindows上のOutlookクラシックアプリに導入する計画 Oct 19, 2023 pm 11:13 PM

Microsoftは、AIを活用した強力なCopilotツールを新しいアプリの独占機能として維持するつもりはないようだ。今回、同社は Windows 上の Outlook クラシック アプリに Copilot を導入する計画を発表したところです。同社の 365 ロードマップ Web サイトに掲載されているように、プレビューは来年 3 月に開始され、3 月まで現在のチャネルのデスクトップで世界中に展開されます。 Copilot は、大規模言語モデル (LLM) を使用して、電子メールの作成、文書の要約、言語の翻訳などのタスクを行うユーザーを支援する生産性ツールです。主な機能の 1 つは、メールを要約する機能です。