PostMessage只負責將消息放到消息隊列中,不確定何時及是否處理,相當于異步操作,執行后馬上返回
SendMessage要等到受到消息處理的返回碼(DWord類型)后才繼續,相當于同步操作,一直在等待,必須等到消息被處理后才會返回。
SendMessageTimeout 函數,是會有一個超時的操作,防止操作一直沒返回,當前程序掛起,這個函數有幾個參數:
LRESULT SendMessageTimeout(HWND hwnd,
UINT Msg,
WPARAM wParam,
LPARAM IParam,
UINT fuFlags,
UIUT uTimeout,
LPDWORD lpdwResultult);
Msg 為 HWND_BROADCAST,是發給所有的窗口。
//for example
//發送端:
? ?WM_CLOSE_AGENT_APP = ::RegisterWindowMessage(_T("CLOSE_AUDIO_DEV_AGENT_APP"));?
? ?PDWORD_PTR lpdwResultult = 0;
? ::SendMessageTimeout(HWND_BROADCAST, WM_CLOSE_AGENT_APP, 0, 0, SMTO_ABORTIFHUNG, 500, lpdwResultult);
? ?//接收端:
? ?//注冊同一個窗口消息,然后監聽注冊的消息
? WM_CLOSE_AGENT_APP = ::RegisterWindowMessage(_T("CLOSE_AUDIO_DEV_AGENT_APP"));??
??ON_REGISTERED_MESSAGE(WM_CLOSE_DEVAGENT_APP, &CILSysAudioDevAgentDlg::OnCloseAgentApp)
?