1
函式getmessage
是從呼叫執行緒的
訊息佇列
裡取得乙個訊息並將其放於指定的結構。此函式可取得與指定視窗聯絡的訊息和由postthreadmesssge寄送的執行緒訊息。此函式接收一定範圍的訊息值。getmessage不接收屬於其他執行緒或
應用程式
的訊息。獲取訊息成功後,執行緒將從
訊息佇列
中刪除該訊息。函式會一直等待直到有訊息到來才有返回值。
postmessage 與 sendmessage 函式對比
sendmessage把訊息直接傳送到視窗,並呼叫此視窗的相應訊息處理函式,等訊息處理函式結束後sendmessage才返回!sendmessage傳送的訊息不進入系統的訊息佇列;sendmessage函式有返回值
postmessage將訊息傳送到與建立視窗的執行緒相關聯的訊息佇列後立即返回;postmessage函式沒有返回值;
2getmessage 與 peekmessage函式的對比
getmessage(lpmsg lpmsg, hwnd hwnd, uint wmsgfiltermin, uint wmsgfiltermax)
peekmessage(lpmsg lpmsg, hwnd hwnd, uint wmsgfiltermin, uint wmsgfiltermax,uint wremovemsg)
3根據引數可以看出以上2個函式的區別,引數wremovemsg的作用是指定訊息獲取的方式,如果設為pm_noremove,那麼訊息將不會從訊息佇列中被移出,如果設為pm_remove,那麼訊息將會從訊息佇列中被移出;
4還有區別:
他們如果沒有捕獲到訊息,程式的主線程會被作業系統掛起。當作業系統再次回來照顧此執行緒時,發現訊息佇列中仍然沒有訊息可取,此時兩個函式的行為就不同了:
5getmessage : 過門不入,作業系統再次掛起此執行緒,去照顧別的執行緒;
peekmessage: 取回控制權,使程式執行一段時間,等待可能的訊息進入訊息佇列並將其捕獲;這時程式進入空閒時間階段;
MFC訊息迴圈中幾個函式的差異
windows程式設計師因該都知道訊息迴圈的!本人曾經寫過類似於此篇的文章,無奈當時沒有去看多執行緒,講的比較生硬,也許受到眾多讀者的批判或質疑,而且那個使用者的密碼也忘記了,無法修改,只能舊事重提!這次主要講解4個 2對 函式 傳送訊息的函式和接受訊息的函式各2個 1 傳送訊息的函式 這裡主要講 ...
MFC中的訊息處理函式
1 在windows api程式設計中,直接在訊息處理函式中編寫wm paint處理 2 在mfc中,cframewnd的訊息處理過程在 呢?mfc時如何將訊息處理函式和視窗關聯起來的。在cframewnd createex中,呼叫precreatewindows來註冊視窗。afxdefregist...
MFC程式中訊息以及函式的處理順序
mfc應用程式中處理訊息的順序 1.afxwndproc 該函式負責接收訊息,找到訊息所屬的cwnd物件,然後呼叫afxcallwndproc 2.afxcallwndproc 該函式負責儲存訊息 儲存的內容主要是訊息識別符號和訊息引數 用程式以後使用,然後呼叫windowproc 函式 3.win...