sendmessage和postmessage的区别
生活随笔
收集整理的這篇文章主要介紹了
sendmessage和postmessage的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、POSTMESSAGE(非阻塞)與SENDMESSAGE(阻塞) 區(qū)別1:返回時間不同 PostMessage發(fā)送消息后就立即返回
SendMessage發(fā)送消息后,等待消息處理函數(shù)處理完后才返回。
區(qū)別2:返回值不同
從函數(shù)定義上來看,PostMessage的返回值是BOOL, 意思是返回非0值,消息執(zhí)行成功,返回0,執(zhí)行不成功。SendMessage的返回值是LRESULT,返回的是消息處理函數(shù)后的返回值。
區(qū)別3:同步和異步問題 如果發(fā)送的消息碼在WM_USER之下(非自定義消息)且消息參數(shù)中帶有指針,那么 PostMessage,SendNotifyMessage,SendMessageCallback這些異步消息發(fā)送 函數(shù)將會失敗。原因是異步消息發(fā)送函數(shù)發(fā)送后會立即返回,這樣會導(dǎo)致消息處理函數(shù)還未處理消息,消息參數(shù)中的指針就被釋放了。
區(qū)別4:發(fā)送中的過程不同 在同一個線程中,PostMessage發(fā)送消息時,消息要先放入系統(tǒng)消息隊列中, 系統(tǒng)會根據(jù)存放的消息,找到對應(yīng)的線程(窗口、程序)的消息隊列中,然后由 GetMessage/PeekMessage提交給TranslateMessage,如果是鍵盤、鼠標(biāo)消息, TranslateMessage會處理提交給DispatchMessage,如不是,則直接提交給 DispatchMessage,最后DispatchMessage經(jīng)USER模塊協(xié)助,將消息傳遞給窗口 處理函數(shù);而SendMessage發(fā)送消息時,由USER模塊調(diào)用目標(biāo)窗口的處理函數(shù) 處理消息,并將結(jié)果返回。 不在同一個線程,基本都是用PostThreadMessage代替PostMessage,因為 PostThreadMessage是直接指定線程ID來確定目標(biāo)線程;而SendMessage發(fā)送 消息到目標(biāo)窗口所屬的線程的消息隊列中,然后發(fā)送消息的線程在UESR模塊內(nèi) 監(jiān)視和等待消息處理,直到目標(biāo)窗口處理完返回。總結(jié)
以上是生活随笔為你收集整理的sendmessage和postmessage的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 西工大文化学校地址(西工大文化补学学校官
- 下一篇: WebBrowser控件打开https站