Peekmessage和Getmessage

Peekmessage和Getmessage都是向系統的消息隊列中取得消息,不過性質不同。 若第一次向消息隊列中取不到消息,則程序的主線程會被OS(操作系統)掛起;等到OS重新調度到該線程時,而且消息隊列仍然是空的時,兩者的性質不同: 若使用Getmessage(),則程序的主線程會仍被OS掛起。 若是用Peekmessage(),則程序會取得OS控制權,運行一段時間。此函數多用於處理系統的空閒時間。 getmessage and peekmessage are both get the message from send_message queue. getmessage supports 同步機制。PEEKMESSAGE SUPPORTS 異步機制。 從原因上而言:GetMessage函數從消息隊列中得到消息後並在隊列中刪除該消息 PeekMessage函數從消息隊列中得到消息後並不在隊列中刪除該消息 從結果上而言:GetMessage等待一個消息(就像_getch),直到拿到消息才返回 PeekMessage不是這樣(就像_kbhit),查詢消息隊列,有就取,即使沒有也立即返回。 爲了實現windows的多任務,要用getmessage,因爲當getmessage發現自己的消息隊列裏沒有消息時,就會把控制權交還給系統,這樣就可以讓避免資源的浪費。 GetMessage函數每次調用是肯定會取回一個消息的,當消息隊列爲空的時候此進程會被掛起直到消息隊列中有消息可取爲止。 PeekMessage函數不管消息隊列中是否有消息都會立即返回,返回是可以從返回的值裏判斷是否取到了消息,準確地說此函數是詢問了一下消息隊列,至於取回消息後是否從消息隊列中刪除此消息,由參數可以指定。 Windows3.1時很多應用程序的消息隊列是由GetMessage函數構成的,而Win32以後大多數的應用程序的消息隊列是由 PeekMessage函數構成的,vc和bcb好像都是這樣的,基於Win32的搶先式多任務處理機制,採用PeekMessage函數構成的消息循環也不會對系統造成什麼威脅。 本文來自CSDN博客:http://blog.csdn.net/rbagglo/archive/2009/05/20/4202622.aspx
發佈了47 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章