MFC的sendmessage和postmessage 以及sendmessagetimeout
PostMessage只負責將消息放到消息隊列中,不確定何時及是否處理,相當于異步操作,執(zhí)行后馬上返回
SendMessage要等到受到消息處理的返回碼(DWord類型)后才繼續(xù),相當于同步操作,一直在等待,必須等到消息被處理后才會返回。
SendMessageTimeout 函數(shù),是會有一個超時的操作,防止操作一直沒返回,當前程序掛起,這個函數(shù)有幾個參數(shù):
Msg 為 HWND_BROADCAST,是發(fā)給所有的窗口。
fuFlags;指定如何發(fā)送消息。此參數(shù)可為下列值的組合: SMTO_ABORTIFHUNG:如果接收進程處于“hung”狀態(tài),不等待超時周期結束就返回。 SMTO_BLOCK:阻止調用線程處理其他任何請求,直到函數(shù)返回。 SMTO_NORMAL:調用線程等待函數(shù)返回時,不被阻止處理其他請求。 SMTO_NOTIMEOUTIFNOTHUNG:Windows 95及更高版本:如果接收線程沒被掛起,當超時周期結束時不返回。 uTimeout:為超時周期指定以毫秒為單位的持續(xù)時間。如果該消息是一個廣播消息,每個窗口可使用全超時周期。例如,如果指定5秒的超時周期,有3個頂層窗回未能處理消息,可以有最多15秒的延遲。 IpdwResult:指定消息處理的結果,依賴于所發(fā)送的消息。 返回值:如果函數(shù)調用成功,返回非零值。如果函數(shù)調用失敗,或超時,返回值是零。若想獲得更多的錯誤信息,請調用GetLastError函數(shù)。如果GetLastError返回零,表明函數(shù)超時。如果使用HWND_BROADCAST,SenddMessaggTimeout不提供單個窗口超時信息。
//for example
//發(fā)送端:
? ?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);
? ?//接收端:
? ?//注冊同一個窗口消息,然后監(jiān)聽注冊的消息
? WM_CLOSE_AGENT_APP = ::RegisterWindowMessage(_T("CLOSE_AUDIO_DEV_AGENT_APP"));??
??ON_REGISTERED_MESSAGE(WM_CLOSE_DEVAGENT_APP, &CILSysAudioDevAgentDlg::OnCloseAgentApp)
?
轉載于:https://www.cnblogs.com/132818Creator/p/11466195.html
總結
以上是生活随笔為你收集整理的MFC的sendmessage和postmessage 以及sendmessagetimeout的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国银行信用卡积分怎么计算?如何兑换积分
- 下一篇: Win10卸载python总是提示err