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.
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!