2016-11-18 3 views
0

Wie i-Signal von einem Worker-Thread zu einem anderen Arbeitsthread senden kann? Der erste Thread wird auf das Signal vom zweiten Thread warten, nachdem der erste Thread seine Jobs ausgeführt hat. Wie kann ich das umsetzen?Sendesignal zwischen zwei untergeordneten Thread in MFC

+2

'Postthreadmessage()' ist eine Möglichkeit. –

+2

'WaitForSingleObject',' SetEvent' –

+0

@JoeWillcoxson: [Warum von Postthreadmessage geschrieben haben Nachrichten verschwinden?] (Https://blogs.msdn.microsoft.com/oldnewthing/20090930-00/?p=16553) Außerdem stehen die Chancen, dass Sie auch in die entgegengesetzte Richtung synchronisieren möchten, also suchen Sie nach dem Äquivalent von 'SendThreadMessage' ([welches nicht existiert] (https://blogs.msdn.microsoft.com/oldnewthing/20081223- 00 /? P = 19743)). – IInspectable

Antwort

0

Mit „ein Signal senden“ Ich nehme an, du meinst nicht (Windows) Nachricht senden. Zu komplizierte Implementierung für etwas wirklich Einfaches. Ihr (2.) Worker-Thread sollte eine Nachrichtenschleife erstellen und nach einer (benutzerdefinierten) Nachricht suchen? Ziemlich übertrieben. Obwohl Worker-Threads natürlich Nachrichten-Loops erstellen können, ist das sehr ungewöhnlich.

Bessere Nutzung der Synchronisation und der richtige Objekttyp hierfür ist ein „Event“ (ein einfaches Objekt, das entweder in signalisiert oder nicht signalisierte Zustand sein kann). Der 2. Thread sollte darauf warten, und der 1. Thread muss auf den signalisierten Zustand setzen, um den 2. zu benachrichtigen, um seine Aufgabe zu erledigen (dies bedeutet "Senden des Signals").

+0

* "Obwohl Worker-Threads natürlich Message-Loops erstellen können, ist das sehr ungewöhnlich." * - Nein, nicht wirklich. Das ist ** sehr üblich. Jeder Worker-Thread, der ein COM-Objekt hostet, das nur mit der STA kompatibel ist, führt eine Nachrichtenschleife aus. Tatsächlich muss jeder (Worker-) Thread, der in der STA initialisiert wurde, eine Nachrichtenschleife haben. Die Synchronisation durch Nachrichtenübermittlung ist als solche sehr, sehr üblich. – IInspectable

Verwandte Themen