青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 4, comments - 6, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

關于windows、線程、消息的一點體會

Posted on 2008-01-02 19:35 hongsion 閱讀(2094) 評論(5)  編輯 收藏 引用 所屬分類: Windows

以下內容完全把window 操作系統當作一個黑盒,因此所有內容只能作為對其內部的一個猜測。

1. windows操作系統內部在創建一個線程的時候,會自動為它創建一個消息隊列。

2.每當一個線程創建一個窗口的時候,操作系統內部都會把該窗口的Handle和線程相關聯。很有可能在操作系統內部會維護一個窗口handle到線程的map. 還有一種可能就是窗口的成員變量里面有一個指針,指向創建它的線程。

3.窗口本身并沒有消息隊列,所有發到窗口的消息,都會自動被發到創建該窗口的線程的消息隊列中。

4.每個線程只能處理自己線程隊列里面的消息,不能處理其他線程消息隊列里面的消息。
所以PeekMessage(LPMSG lpMsg, HWND hWnd, UINT,UINT,UINT)函數中,如果hWnd不是本線程創建的窗口,則該函數調用失敗。

5.由于在線程消息隊列里面的消息會包含有窗口句柄,所以PeekMessage可以專門處理某個特殊窗口的消息。


6. 曾經有疑問線程是不是只有創建了窗口才具有消息隊列,但又覺得應該不是這樣,因為在windows的API里面有個函數叫PostThreadMessage,可以直接把消息投遞到線程的消息隊列里面,而不需要任何窗口句柄。后來在MSDN里面有這么一段描述,覺得解釋的很詳細:
“The system maintains a single system message queue and one thread-specific message queue for each graphical user interface (GUI) thread. To avoid the overhead of creating a message queue for non–GUI threads, all threads are created initially without a message queue. The system creates a thread-specific message queue only when the thread makes its first call to one of the User or Windows Graphics Device Interface (GDI) functions".
 這里唯一的疑問我想應該是”makes its first call to one of the User or Windows Graphics Device Interface (GDI) functions", 這句話的意思是不是等同于創建一個窗口呢?

Feedback

# re: 關于windows、線程、消息的一點體會  回復  更多評論   

2009-04-03 22:22 by rico
有見地!

The system creates a thread-specific message queue only when the thread makes its first call to one of the User or Windows Graphics Device Interface (GDI) functions".

非常有意思的地方,也就是說,程序不能顯示的為自己的一個線程創建消息隊列。更有意思的是一篇文章說,如果你給一個線程postthreadmessage如果失敗,那么對不起,等等再試,直到成功,非常滑稽的設計。最想不通的是,其他操作系統上,你愛怎么創建消息隊列,你就創建,也沒有什么限制,為啥微軟的消息隊列就必須要受限?

恐怕是早期,微軟假設,一個進程一個消息隊列足以。后來支持多線程了,又缺省的認為,工作線程,你別關心UI的事情,不給你消息隊列。等到最后來,覺得線程消息也不錯啊,這樣又允許非主線程擁有消息隊列,并可以在上面完成UI。總之,感覺在微軟看來,消息隊列除了干UI的事情,沒啥用。你要在進程之間發個自定義消息,那也不是他很期望的事情。

純屬推測。

# re: 關于windows、線程、消息的一點體會  回復  更多評論   

2009-04-03 22:40 by rico
另外,PostThreadMessage,都不可以帶窗口Handle的喔。當然,如果是發給窗體的,微軟認為,postmessage就可以了。這就讓人納悶了,我消息不是直接發給窗體的,而是直接發給一個線程的,雖然那個窗體屬于某個線程,并最終會被dispatch到對應的窗口,因為操作系統自己也登記了窗口屬于那個線程(博主的推測)。

所以微軟想開發者,老老實實的,你要發消息到另外一個窗口,不用告訴我窗口所在的線程,告訴我窗口句柄就可以了,我(os)曉得該怎么轉發,不用你脫了褲子放屁(對我os來說)。

但是,如果程序自己保存得有窗口所在線程的Handle,你postthreadmessage就不消到操作系統查map,豈不是快些?不過感覺這是微軟的慣例了,盡量封裝多一點,封裝死一點,這樣系統看起來更復雜和高深。同時這樣安裝盤可以做的更大些,這樣,可以可以消耗更多塑料,拉動GDP,而且是圍繞微軟的GDP。

# re: 關于windows、線程、消息的一點體會  回復  更多評論   

2009-05-22 11:47 by 飛鴿傳書
有點難理解。

# re: 關于windows、線程、消息的一點體會  回復  更多評論   

2009-05-22 11:53 by 飛鴿傳書
哈哈,表達得太好了。@rico

# re: 關于windows、線程、消息的一點體會[未登錄]  回復  更多評論   

2012-01-16 17:39 by 葡萄
1. windows操作系統內部在創建一個線程的時候,會自動為它創建一個消息隊列。

這個說的不對。在線程創建的時候,所有線程都是沒有消息隊列的。
只有這個線程中顯式的調用GUI相關函數(例如創建窗口)時或者PostThreadMessage時,才會給這個線程創建消息隊列。

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲午夜久久久| 欧美专区在线观看一区| 欧美成人精品在线| 亚洲日本国产| 日韩一级精品| 国产精品日韩欧美一区二区| 欧美一区二区三区四区在线| 久久精品国产久精国产爱| 伊人久久大香线蕉综合热线| 欧美福利一区| 欧美美女操人视频| 欧美一区日韩一区| 久久久女女女女999久久| 亚洲精品欧美| 亚洲视频一区二区免费在线观看| 国产日韩欧美夫妻视频在线观看| 蜜臀av性久久久久蜜臀aⅴ| 免费看成人av| 午夜精品久久久久久久| 久久久蜜桃一区二区人| 一区二区日韩伦理片| 欧美一区二区日韩| 亚洲精品视频一区二区三区| 亚洲一区二区成人| 亚洲国产你懂的| 国产精品99久久99久久久二8 | 欧美国产精品va在线观看| 欧美极品欧美精品欧美视频| 亚洲欧美在线高清| 欧美大秀在线观看| 欧美一区二视频| 欧美激情成人在线视频| 久久不射网站| 欧美日韩精品免费观看| 久久蜜桃精品| 国产精品久久久久一区二区三区 | 久久精品国产精品亚洲综合| 免费成年人欧美视频| 欧美在线视频一区二区| 欧美日韩国产在线观看| 免费一级欧美在线大片| 国产精品亚洲视频| 99在线|亚洲一区二区| 亚洲国产日韩欧美| 校园春色国产精品| 亚洲欧美日韩爽爽影院| 欧美人成在线| 欧美电影资源| 在线观看三级视频欧美| 欧美一级片久久久久久久| 亚洲永久免费av| 欧美激情视频在线播放 | 亚洲第一网站免费视频| 国产欧美日韩高清| 一本到12不卡视频在线dvd| 日韩视频一区二区| 免费国产一区二区| 欧美成人一区在线| 亚洲第一黄色| 久久一区欧美| 欧美激情小视频| 亚洲高清免费视频| 免费久久精品视频| 亚洲第一二三四五区| 亚洲高清久久网| 美女黄毛**国产精品啪啪| 久久一二三国产| 在线观看亚洲精品视频| 久久精品国产久精国产一老狼| 久久精品亚洲国产奇米99| 国产一区二区无遮挡| 欧美一级大片在线观看| 久久影院午夜论| 在线观看中文字幕亚洲| 男人的天堂亚洲在线| 亚洲国产第一页| 国产精品99久久久久久人 | 久久久亚洲国产美女国产盗摄| 久久婷婷综合激情| 亚洲高清自拍| 欧美日韩国产高清| 午夜久久黄色| 欧美va亚洲va香蕉在线| 亚洲激情在线播放| 欧美日韩一区二区三区免费| 亚洲视频电影在线| 久久久久99| 亚洲精品久久久久久久久久久久| 欧美日韩999| 亚洲综合精品四区| 欧美成人精品1314www| 一区二区三区视频在线| 国产欧美一区二区三区沐欲| 久久青草欧美一区二区三区| 亚洲国产高清视频| 午夜精品久久久久久久男人的天堂 | 久久青草久久| 亚洲精品久久| 国产精品专区一| 美国成人毛片| 亚洲一区国产精品| 欧美激情亚洲一区| 午夜精品福利电影| 91久久在线播放| 国产精品久久久久婷婷| 玖玖综合伊人| 亚洲综合导航| 亚洲激情综合| 久久亚洲风情| 亚洲在线观看视频网站| 亚洲福利视频一区二区| 国产精品久久久久久妇女6080 | 欧美另类一区二区三区| 久久国产主播精品| 在线亚洲高清视频| 亚洲国产1区| 久久视频一区| 欧美在线观看一区二区| 一区二区三区四区五区精品视频| 韩国一区电影| 国产欧美日韩91| 国产精品九九| 欧美裸体一区二区三区| 久久综合久久综合这里只有精品| 亚洲免费在线观看视频| 一本色道久久88综合亚洲精品ⅰ| 亚洲二区在线| 欧美激情一区二区在线| 久久九九全国免费精品观看| 亚洲欧美国产高清| 一本色道88久久加勒比精品| 亚洲人成啪啪网站| 在线免费观看视频一区| 国产又爽又黄的激情精品视频| 国产精品免费网站| 欧美午夜视频一区二区| 欧美私人啪啪vps| 欧美日韩国产美| 欧美日韩国产免费观看| 欧美日本一道本| 欧美激情女人20p| 欧美激情网站在线观看| 免费成人毛片| 欧美精品v日韩精品v韩国精品v | 另类图片国产| 久久一区激情| 嫩模写真一区二区三区三州| 美女免费视频一区| 美日韩精品免费| 欧美国产日韩免费| 欧美日本久久| 国产精品国产a级| 国产精品你懂得| 国产一区二区三区在线观看免费| 国产综合色产在线精品| 激情成人中文字幕| 亚洲人成在线播放| 一本色道精品久久一区二区三区| 中文高清一区| 性做久久久久久| 免费观看在线综合| 亚洲精品国产无天堂网2021| 99精品欧美一区二区三区综合在线| av不卡在线| 性久久久久久久久久久久| 久久久久久一区二区| 欧美成人精品一区二区三区| 欧美日韩一区二| 国产亚洲一区在线播放| 亚洲电影观看| 亚洲天堂男人| 久久免费少妇高潮久久精品99| 欧美freesex8一10精品| 日韩午夜在线播放| 欧美在线欧美在线| 欧美日本免费| 国产日韩视频一区二区三区| 亚洲人成网站999久久久综合| 亚洲综合电影| 欧美成ee人免费视频| 一本一本久久a久久精品综合麻豆| 欧美一区二区精品在线| 欧美伦理视频网站| 黄色av日韩| 亚洲一区国产精品| 欧美成人小视频| 亚洲自拍偷拍福利| 欧美另类视频在线| 黑人巨大精品欧美黑白配亚洲| 在线综合亚洲| 另类av导航| 亚洲女性裸体视频| 欧美精品v国产精品v日韩精品| 国产性做久久久久久| 一本久久综合亚洲鲁鲁五月天| 免费一级欧美片在线观看| 亚洲婷婷国产精品电影人久久| 欧美肥婆bbw| 亚洲福利小视频| 久久久久一区二区三区四区|