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

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>
            99在线热播精品免费| 亚洲欧美日韩综合国产aⅴ| 性久久久久久久久| 麻豆精品视频| 久久久久久久网| 欧美日韩一级大片网址| 在线亚洲免费| 亚洲一区二区三区中文字幕在线| 久久国产色av| 在线看国产日韩| 亚洲欧美中文日韩v在线观看| 亚洲视频你懂的| 蜜桃av一区二区| 国产日韩亚洲| 久久一区二区三区四区| 麻豆精品视频在线观看| 国产啪精品视频| 久久精品国产视频| 免费在线看一区| 国产综合久久| 欧美激情第六页| 欧美香蕉视频| 99综合在线| 欧美激情四色| 国产精品乱码人人做人人爱| 亚洲乱码国产乱码精品精| 亚洲毛片在线看| 国产综合精品一区| 亚洲美女网站| 欧美日韩国产成人高清视频| 久久国产福利| 欧美国产精品中文字幕| 久久精品日韩| 欧美伊人久久久久久午夜久久久久 | 日韩一区二区福利| 美女性感视频久久久| 欧美日韩免费观看一区二区三区| 亚洲伦理在线| 亚洲高清免费| 久久久亚洲精品一区二区三区 | 亚洲国产高清自拍| 亚洲视频在线二区| 亚洲国产日韩一级| 欧美在线视频一区二区三区| 这里只有精品视频在线| 亚洲麻豆av| 欧美午夜一区二区福利视频| 亚洲视频一区二区| 久久亚洲视频| 99亚洲视频| 美女国内精品自产拍在线播放| 在线免费观看日本欧美| 欧美高清视频在线| 欧美激情亚洲国产| 老司机午夜精品| 国产日韩在线视频| 亚洲一区视频在线观看视频| 国产性做久久久久久| 亚洲午夜在线| 在线成人激情视频| 久久久国产亚洲精品| 亚洲欧洲视频在线| 麻豆91精品91久久久的内涵| 久久久亚洲成人| 国产亚洲美州欧州综合国| 免费一级欧美片在线播放| 国内成+人亚洲| 午夜精品在线观看| 久久成人18免费网站| 快射av在线播放一区| 一区二区三区 在线观看视| 欧美激情第一页xxx| 亚洲国产一成人久久精品| 亚洲国产激情| 亚洲伊人第一页| 香蕉久久夜色精品国产使用方法| 久久天堂成人| 欧美电影在线播放| 亚洲精品久久视频| 欧美日韩国产系列| 在线中文字幕一区| 午夜在线精品| 黄色成人在线免费| 日韩一区二区高清| 在线观看日韩专区| 亚洲永久精品大片| 欧美专区一区二区三区| 狠狠噜噜久久| 欧美精品激情在线| 午夜精品一区二区三区在线视 | 欧美中在线观看| 欧美精品在线视频| 这里只有精品在线播放| 最新国产成人av网站网址麻豆| 亚洲一区二区三区影院| 亚洲美女av网站| 欧美日韩精选| 欧美一级大片在线免费观看| 欧美寡妇偷汉性猛交| 亚洲视频中文字幕| 欧美久久久久中文字幕| 亚洲综合第一页| 欧美成人按摩| 在线播放日韩欧美| 国产精品盗摄久久久| 久久精品人人做人人综合| 亚洲人屁股眼子交8| 久久国产黑丝| 国产欧美日韩综合| 欧美 日韩 国产精品免费观看| 一区二区高清在线| 亚洲午夜精品久久| 在线成人欧美| 国产精品一香蕉国产线看观看 | 欧美国产日本| 欧美在线高清| 久久精品2019中文字幕| 日韩一级黄色大片| 欧美日韩大片| 一本色道久久综合亚洲精品婷婷| 久久一区二区三区国产精品| 亚洲一区精品电影| 国产精品区一区二区三区| 久久天天综合| 性做久久久久久| 亚洲午夜伦理| 久久精品国产91精品亚洲| 一区二区激情小说| 亚洲片在线观看| 欧美日韩天堂| 久久一区二区三区超碰国产精品| 欧美二区在线播放| 日韩视频在线观看| 欧美午夜宅男影院在线观看| 亚洲欧美日本在线| 久久国产精品网站| 亚洲欧美日韩在线播放| 一区二区精品国产| 国产麻豆9l精品三级站| 久久成人综合视频| 欧美在线免费观看| 午夜在线视频一区二区区别| 午夜精品一区二区三区四区 | 日韩天天综合| 99精品视频免费| 久久人人97超碰国产公开结果| 在线欧美小视频| 影音先锋亚洲电影| 亚洲风情亚aⅴ在线发布| 亚洲电影免费观看高清完整版在线观看 | 欧美日韩免费高清| 欧美日韩成人免费| 午夜免费日韩视频| 欧美成人a视频| 亚洲性人人天天夜夜摸| 狠狠操狠狠色综合网| 好吊视频一区二区三区四区 | 国产亚洲福利| 在线看视频不卡| 亚洲国产一区二区精品专区| 亚洲激情在线视频| 亚洲视频国产视频| 欧美一区二视频| 中文网丁香综合网| 午夜精品久久久99热福利| 欧美一区国产一区| 欧美凹凸一区二区三区视频| 亚洲综合色婷婷| 亚洲国产乱码最新视频| 亚洲精品一区二区网址| 韩国成人理伦片免费播放| 在线观看视频免费一区二区三区| 亚洲精品欧洲| 亚洲午夜视频在线| 久久综合九色九九| 欧美在线观看一区二区三区| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲大片在线| 欧美黑人国产人伦爽爽爽| 久久精品在线免费观看| 亚洲午夜视频在线观看| 久久国产精品久久久久久| 亚洲免费在线视频| 久久久最新网址| 欧美在线一级视频| 欧美国产日产韩国视频| 亚洲一区一卡| 中文一区在线| 久久亚洲国产精品一区二区| 欧美在线网站| 欧美色欧美亚洲高清在线视频| 黄色成人小视频| 亚洲主播在线| 亚洲国产精品欧美一二99| 亚洲欧美日本另类| 欧美一区二区日韩| 欧美日韩国产在线播放网站| 在线观看欧美日韩| 性做久久久久久久久| 99亚洲精品|