In meiner MFC-Anwendung habe ich einen Worker-Thread, der eine Netzwerkverbindung abhört und sobald einige Informationen angekommen sind, rufe ich SendMessageToDescendants
an, um diese Informationen über den Lparam-Parameter zu senden. Daher wird jedes Rahmenfenster die Nachricht erhalten und möglicherweise über einen Nachrichtenhandler für die Nachricht WM_SYNCHRONOTIFICATION
(WM_SYNCHRONOTIFICATION
ist eine WM_APP+x
Nachricht) verarbeiten.Verwenden von SendMessageToDescendants zwischen Threads
-Code in dem Arbeitsthread: (der Kürze halber vereinfacht)
while (TRUE)
{
CNotificationMessage notificationmessage;
Listen(¬ificationmessage); // blocking until some information arrives
m_pMainWnd->SendMessageToDescendants(WM_SYNCHRONOTIFICATION, NULL, (LPARAM)(newnotif));
// have all OnSynchroNotification handlers been called here ?
}
Message handler im Hauptthread:
LRESULT CMyFrame::OnSynchroNotification(WPARAM p1, LPARAM p2)
{
CNotificationMessage *pNotification = (CNotificationMessage*)p2;
// process message (ommited for brevity)
}
Der Code funktioniert gut, aber ich bin nicht sicher, wenn bei der Rückkehr von SendMessageToDescendants
alle OnSynchroNotification
aufgerufen wurden.
[niemals Sendmessage Vielfalt nutzen aus einem Thread] (http://stackoverflow.com/a/29603742/17034). –