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)