내 MFC 응용 프로그램에서 나는 네트워크 연결을 수신 대기하고 일부 정보가 도착하자마자 lparam 매개 변수를 통해 해당 정보를 보내도록 SendMessageToDescendants
을 호출합니다. 따라서 모든 프레임 윈도우는 메시지를 가져 와서 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). –