MFC中訊息迴圈處理的幾個函式之間的區別

2021-06-17 00:21:08 字數 1027 閱讀 1454

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...