私のMFCアプリケーションでは、ネットワーク接続をリッスンするワーカースレッドがあり、情報が到着するとすぐにSendMessageToDescendants
にlparamパラメータを介して情報を送信するように呼び出します。したがって、すべてのフレームウィンドウはメッセージを取得し、可能であればWM_SYNCHRONOTIFICATION
メッセージ(WM_SYNCHRONOTIFICATION
はWM_APP+x
メッセージ)のメッセージハンドラを介して処理します。ワーカースレッドでスレッド間でSendMessageToDescendantsを使用する
コード:メインスレッドで
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 ?
}
メッセージハンドラ(簡潔にするために簡略化):
LRESULT CMyFrame::OnSynchroNotification(WPARAM p1, LPARAM p2)
{
CNotificationMessage *pNotification = (CNotificationMessage*)p2;
// process message (ommited for brevity)
}
コードが正常に動作しますが、私はありませんよ戻り時にSendMessageToDescendants
からすべてOnSynchroNotification
が呼び出されているかどうかを確認してください。
[どんなのSendMessage品種を使用しないでくださいスレッドから](http://stackoverflow.com/a/29603742/17034)。 –