Die Kommunikationsmethoden zwischen Threads sind wie folgt:
1. Nachrichtenwarteschlange, die am häufigsten verwendet wird Die eine und die flexibelste ermöglicht die Übertragung komplexer und einfacher Datenstrukturen durch benutzerdefinierte Datenstrukturen.
In der Windows-Programmierung kann jeder Thread über eine eigene Nachrichtenwarteschlange verfügen (der UI-Thread verfügt standardmäßig über eine eigene Nachrichtenwarteschlange und eine eigene Nachrichtenschleife, und der Arbeitsthread muss die Nachrichtenschleife manuell implementieren), sodass Nachrichten vorhanden sein können Wird zur Kommunikation zwischen Threads verwendet. sendMessage, postMessage.
Nachricht definieren #define WM_THREAD_SENDMSG=WM_USER+20;
Nachrichtenfunktionsdeklaration hinzufügen afx_msg int OnTSendmsg();
Nachrichtenzuordnung hinzufügen ON_MESSAGE(WM_THREAD_SENDMSG,OnTSM)
Fügen Sie die Implementierungsfunktion von OnTSM() hinzu
Fügen Sie die PostMessage-Nachrichtenfunktion in der Thread-Funktion hinzu
2 Verwenden Sie globale Variablen
Threads Der Prozess Memory Sharing 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.
3. Verwenden Sie die Ereignisklasse CEvent, um die Kommunikation zwischen Threads zu implementieren.
Ereignisobjekte haben zwei Zustände: signalisiert und nicht signalisiert. Threads können Ereignisse im signalisierten Zustand überwachen, damit sie erkannt werden können Führen Sie zum richtigen Zeitpunkt Operationen für Ereignisse durch.
1) Erstellen Sie ein Objekt der CEvent-Klasse: CEvent threadStart; es befindet sich standardmäßig in einem nicht kommunizierenden Zustand;
2) threadStart.SetEvent(); ;
3) Rufen Sie WaitForSingleObject() auf, um das CEvent-Objekt zu überwachen
Das obige ist der detaillierte Inhalt vonWelche Kommunikationsmethoden gibt es zwischen Threads?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!