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

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??傊杏X在微軟看來,消息隊列除了干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>
            欧美日韩专区| 亚洲精品日韩欧美| 欧美黄色一区二区| 在线综合亚洲欧美在线视频| 性欧美18~19sex高清播放| 久热综合在线亚洲精品| 亚洲欧美精品| 亚洲一区影音先锋| 欧美国产日本高清在线| 欧美高清自拍一区| 一区二区三区视频观看| 美女黄毛**国产精品啪啪| 久久夜色精品一区| 欧美成人免费网站| 亚洲电影免费观看高清完整版在线 | 欧美精品首页| 影音先锋日韩有码| 亚洲国产天堂久久国产91| 欧美一级在线播放| 正在播放亚洲一区| 国产一区二区三区免费不卡| 午夜性色一区二区三区免费视频| 亚洲日本va午夜在线影院| 久久亚洲精品伦理| 欧美激情一区三区| 亚洲色无码播放| 久久精品91| 一区二区三区高清在线 | 亚洲免费观看高清在线观看| 久久亚洲精品视频| 国产最新精品精品你懂的| 亚洲电影欧美电影有声小说| 日韩视频在线观看国产| 欧美激情视频一区二区三区不卡| 欧美三级电影一区| 一本色道久久综合狠狠躁的推荐| 亚洲二区免费| 欧美成人激情视频| 国产精品视频精品视频| 合欧美一区二区三区| 久久久久久成人| 亚洲看片网站| 欧美日韩精品不卡| 在线观看欧美激情| 欧美成人午夜激情| 欧美国产乱视频| 一本色道久久综合一区| 欧美在线视频免费播放| 怡红院精品视频在线观看极品| 久久久91精品国产一区二区三区 | 久久久国产亚洲精品| 影音先锋久久精品| 欧美激情一区二区三区全黄 | 免费成人激情视频| 中日韩高清电影网| 美国十次了思思久久精品导航| 性欧美1819sex性高清| 欧美三区在线观看| 欧美一区二区日韩| 久久亚洲一区二区| 亚洲精品偷拍| 亚洲午夜久久久| 欧美午夜免费| 久久蜜桃香蕉精品一区二区三区| 一级成人国产| 国产日韩精品一区二区浪潮av| 亚洲一区二区在线| 亚洲精品久久久久久久久久久久| 国外视频精品毛片| 91久久精品国产91久久性色| 国产精品h在线观看| 亚洲精品人人| 亚洲一区二区三区视频| 久久精品2019中文字幕| 国产综合第一页| 亚洲电影自拍| 亚洲乱码视频| 亚洲人成7777| 一区二区三区不卡视频在线观看 | 国产精品99久久久久久人| 亚洲欧美视频一区| 日韩视频在线一区| 欧美日韩成人综合天天影院| 99re8这里有精品热视频免费 | 欧美一区二区视频观看视频| 蜜臀久久久99精品久久久久久| 亚洲欧美日韩精品久久奇米色影视| 久久亚洲综合色| 亚洲国产精品传媒在线观看| 欧美激情黄色片| 日韩系列欧美系列| 亚洲激情亚洲| 久久九九有精品国产23| 亚洲伊人一本大道中文字幕| 国产精品一区二区久激情瑜伽| 久久不见久久见免费视频1| 亚洲欧美在线另类| 一区二区av| 男女激情久久| 欧美成人伊人久久综合网| 亚洲人成网站999久久久综合| 亚洲免费观看| 亚洲免费黄色| 国产精品入口尤物| 久久亚洲影院| 午夜精品国产更新| 亚洲第一精品影视| 欧美在线观看一区| 99精品国产99久久久久久福利| 免费不卡在线视频| 校园激情久久| 亚洲精品网站在线播放gif| 久久国产精品99国产精| 99re8这里有精品热视频免费| 毛片基地黄久久久久久天堂| 亚洲无线视频| 亚洲精品一区二区三区樱花| 日韩视频永久免费| 国产亚洲视频在线| 欧美性色视频在线| 欧美精品二区| 久热这里只精品99re8久| 亚洲欧美综合网| 久久久蜜桃一区二区人| 好吊日精品视频| 国产欧美一区二区精品性| 欧美日韩国产成人| 狂野欧美性猛交xxxx巴西| 欧美一级视频精品观看| 夜夜爽av福利精品导航| 在线观看视频欧美| 欧美另类一区| 亚洲欧美日韩成人| 在线视频欧美精品| 久久久在线视频| 欧美一激情一区二区三区| 国内免费精品永久在线视频| 免费欧美日韩| 免费视频最近日韩| 久久这里有精品视频| 久久久久国内| 久久久久久久综合狠狠综合| 亚洲影院一区| 一区二区亚洲欧洲国产日韩| 欧美激情中文字幕乱码免费| 在线亚洲免费| 一区二区三区日韩精品视频| 99精品热视频| 男女视频一区二区| 欧美一区2区三区4区公司二百| 亚洲一区二区四区| 欧美一级欧美一级在线播放| 欧美一区二区免费视频| 久久激情综合网| 久久一区免费| 欧美激情中文不卡| 亚洲乱码国产乱码精品精98午夜 | 欧美国产日本在线| 亚洲丰满在线| 久久精品亚洲一区| 久久久久久久尹人综合网亚洲| 99精品欧美一区二区三区综合在线 | 欧美日韩精品一区| 欧美三区免费完整视频在线观看| 国产精品成人观看视频国产奇米| 久久久久成人精品| 麻豆精品视频| 久久精品人人做人人爽| 久久久午夜视频| 欧美激情综合五月色丁香| 欧美日韩国产在线| 国产视频久久网| 亚洲国产婷婷香蕉久久久久久99 | 激情欧美亚洲| 一区二区久久| 亚洲欧洲一区| 在线精品国产成人综合| 99这里只有精品| 久久久久天天天天| 亚洲精品乱码久久久久久久久| 欧美jjzz| 正在播放欧美一区| 另类av导航| 国产精品网站一区| 国产精品天美传媒入口| 亚洲激情网站免费观看| 欧美亚洲视频在线观看| 亚洲免费视频在线观看| 欧美+亚洲+精品+三区| 久久婷婷色综合| 亚洲视频一二| 久久婷婷影院| 国产日韩欧美精品| 国产欧美韩国高清| 国产精品人成在线观看免费| 国产精品美女xx| 可以免费看不卡的av网站| 欧美午夜精品久久久久久人妖| 欧美日韩亚洲高清一区二区| 欧美日韩亚洲一区二区三区在线观看 |