日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

关于windows消息机制的猜想

發布時間:2023/12/18 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于windows消息机制的猜想 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.

正常情況下一個進程里面只有一個主線程而已。
主線程負責消息的讀取和分析分發。

消息是保存在消息隊列里面,消息隊列是跟線程相關的。每一個線程都有一個消息隊列(工作線程默認沒有,但是隨便給他發送一個消息,或線程內調用getmessage函數,系統會自動給它生產一個消息隊列的)。程序執行邏輯就是,線程不斷的從隊列里面取消息GetMessage,分析處理TranslateMessage,然后派發DispathMessage——就是調用消息對應的窗口處理函數而已。(非綁定窗口的消息,再說)。

任何一個窗口都是跟線程相關的,也就是任何一個HWND句柄,都有所屬的線程。故,不管是進程內還是進程外向某窗口發消息,此消息都會進入那個窗口所在線程的消息隊列,由線程派發給那個窗口過程執行。

對于MODAL對話框,其消息獲取循環是窗口自己的(就是while的那段代碼),但其實獲取的消息還是線程所屬的消息隊列數據,只是為了實現modal效果,所以由窗口過程來實現消息獲取派發,以過濾阻塞對下層窗口的消息派發,(這個效果也可以由主ui線程來完成,不過,那樣會更加復雜,故MFC將modal模式對話框的實現效果,放在了cdialog里面去實現的)。

2.

消息循環和多線程不是一一對應的,消息就是一個棧,每個窗口都有自己的消息棧,操作系統會不停取消息出來處理,如果沒有消息則等待消息入棧。這個就是消息循環。
不同窗口的消息處理其實只是處理器如何分配資源給各個窗口而已,畢竟窗口消息不是一直占用著cpu的。你可以理解為cpu處理了a窗口,然后讓a窗口等待,再去處理b窗口。只是這種切換很快,你根本感覺不到a有等待過。

3.

除了模態對話框其他窗口都沒有消息循環,只有窗口函數,窗口函數處理消息但它沒有循環,窗口函數是被DispatchMessage調用的,DispatchMessage是你在消息循環調用了,其實可以這么說窗口函數是消息循環的一部分。

總結

以上是生活随笔為你收集整理的关于windows消息机制的猜想的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。