Heim  >  Artikel  >  Mehrere Kommunikationsmethoden zwischen Threads

Mehrere Kommunikationsmethoden zwischen Threads

hzc
hzcOriginal
2020-07-01 14:00:1217167Durchsuche

Zu den Kommunikationsmethoden zwischen Threads gehören: 1. Globale Variablen, Speicherfreigabe zwischen Threads im Prozess, was eine gängige Kommunikationsmethode und Interaktionsmethode ist. 3. CEvent-Objekt, CEvent ist ein Das Objekt in MFC kann die Kommunikation zwischen Threads erreichen, indem es den Auslösestatus von CEvent ändert.

Mehrere Kommunikationsmethoden zwischen Threads

Es gibt drei Hauptmethoden der Multi-Thread-Kommunikation:

Globale Variablen

Speicherfreigabe zwischen Threads im Prozess, dies ist eine gängige Kommunikations- und Interaktionsmethode.

Hinweis: Es ist am besten, beim Definieren globaler Variablen volatile zu verwenden, um zu verhindern, dass der Compiler diese Variable optimiert.

2. Nachrichtenmechanismus

Es gibt zwei Hauptschnittstellen für die häufig verwendete Nachrichtenkommunikation: PostMessage und PostThreadMessage

PostMessage ist ein Thread, der Nachrichten sendet zum Hauptfenster. PostThreadMessage ist die Kommunikationsschnittstelle zwischen zwei beliebigen Threads.

2.1.PostMessage()

Funktionsprototyp:

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

Parameter:

hWnd: Das Handle des Fensters, dessen Fensterprogramm Nachrichten empfängt. Es kann zwei Werte mit spezifischer Bedeutung annehmen:

HWND.BROADCAST: Die Nachricht wird an alle Fenster der obersten Ebene des Systems gesendet, einschließlich ungültiger oder unsichtbarer nicht besitzender Fenster und verdeckter Fenster

und Pop-ups. Nachrichten werden nicht an untergeordnete Fenster gesendet.

NULL: Der Vorgang dieser Funktion ist derselbe wie der Aufruf der PostThreadMessage-Funktion, wobei der Parameter dwThread auf den Bezeichner des aktuellen Threads gesetzt ist.

Nachricht: Geben Sie die zu sendende Nachricht an.

wParam: Geben Sie zusätzliche nachrichtenspezifische Informationen an.

IParam: Geben Sie zusätzliche nachrichtenspezifische Informationen an.

Rückgabewert: Wenn der Funktionsaufruf erfolgreich ist, ist der Rückgabewert ungleich Null: Wenn der Funktionsaufruf fehlschlägt, ist der Rückgabewert Null.

MS bietet auch die SendMessage-Methode für die Kommunikation zwischen Nachrichten, SendMessage(). Der Unterschied zwischen ihr und PostMessage ist:

SendMessage ist synchron, während PostMessage asynchron ist. SendMessage muss warten, bis die gesendete Nachricht ausgeführt wurde, bevor es zurückkehrt.

2.2.PostThreadMessage()

Die PostThreadMessage-Methode kann Nachrichten an den angegebenen Thread senden.

Funktionsprototyp: BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);

Die Parameter sind im Grunde die gleichen wie bei PostMessage, außer ThreadId.

Der Zielthread empfängt Nachrichten über die GetMessage()-Methode.

Hinweis: Bei Verwendung dieser Methode muss der Zielthread bereits über eine eigene Nachrichtenwarteschlange verfügen. Andernfalls wird der Fehler ERROR_INVALID_THREAD_ID zurückgegeben. Sie können

PeekMessage() verwenden, um eine Nachrichtenwarteschlange für einen Thread zu erstellen.

3. CEvent-Objekt

CEvent ist ein Objekt in MFC, das durch Ändern des Auslösezustands von CEvent Kommunikation und Synchronisation zwischen Threads erreichen kann.

Das obige ist der detaillierte Inhalt vonMehrere Kommunikationsmethoden zwischen Threads. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn