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

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

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

Posted on 2008-01-02 19:35 hongsion 閱讀(2083) 評論(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黑人| 国产精品久久久久毛片软件| 日韩视频免费大全中文字幕| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲自拍偷拍视频| 欧美高清不卡在线| 亚洲精品免费电影| 韩国福利一区| 国产视频在线观看一区二区| 性久久久久久久久久久久| 99精品免费| 欧美三区视频| 亚洲欧美激情一区二区| 亚洲一区二区三区涩| 国产精品色婷婷| 欧美在现视频| 久久国产天堂福利天堂| 激情综合网址| 免费看黄裸体一级大秀欧美| 久久久在线视频| 午夜亚洲精品| 亚洲高清久久| 亚洲福利免费| 欧美日韩国产探花| 亚洲欧美一级二级三级| 欧美一级大片在线观看| 精品999网站| 欧美顶级少妇做爰| 欧美黄色一区二区| 亚洲欧美日韩另类| 久久影院亚洲| 亚洲一区二区三区免费观看 | 亚洲精品国久久99热| 99成人免费视频| 国产亚洲精品激情久久| 亚洲国产人成综合网站| 中文精品视频| 在线电影欧美日韩一区二区私密| 亚洲黄色在线视频| 国产伦精品一区二区三区视频黑人| 久久久久国产精品一区三寸| 欧美电影电视剧在线观看| 欧美一级视频精品观看| 欧美国产在线视频| 久久精品国产欧美激情| 欧美片在线播放| 久久躁日日躁aaaaxxxx| 欧美午夜电影在线| 欧美成人一区二区三区在线观看| 国产精品日本精品| 亚洲日本免费| 亚洲国产精品成人综合色在线婷婷| 亚洲视频福利| 99re6热只有精品免费观看| 久久免费的精品国产v∧| 欧美另类专区| 欧美h视频在线| 国产一区二区无遮挡| 999亚洲国产精| 亚洲人成毛片在线播放| 久久久国产午夜精品| 亚洲天堂激情| 亚洲国产精品久久91精品| 狠狠久久五月精品中文字幕| 一区二区三区成人精品| 一本久道久久综合狠狠爱| 亚洲精品自在久久| 欧美 日韩 国产一区二区在线视频 | 欧美激情免费观看| 中文网丁香综合网| 国产女主播视频一区二区| 亚洲第一狼人社区| 国产主播精品| 性欧美精品高清| 午夜性色一区二区三区免费视频| 欧美阿v一级看视频| 国产精品视区| 一区二区三区 在线观看视| 亚洲欧洲精品一区二区精品久久久| 欧美一区二区啪啪| 欧美中文在线免费| 国产精品午夜电影| 亚洲午夜精品视频| 午夜欧美不卡精品aaaaa| 99视频精品全国免费| 一区二区日韩精品| 欧美日韩一二三四五区| 亚洲高清免费| 国产精品一区二区三区乱码| 91久久精品国产91久久| 另类酷文…触手系列精品集v1小说| 久久国产欧美精品| 国产性色一区二区| 久久久福利视频| 欧美国产高潮xxxx1819| 亚洲第一福利视频| 免费黄网站欧美| 91久久精品国产| 亚洲素人一区二区| 国产精品无码永久免费888| 欧美一区视频| 欧美本精品男人aⅴ天堂| 亚洲区第一页| 欧美日韩高清在线| 亚洲欧美国内爽妇网| 女同一区二区| 一个色综合av| 欧美成人精品一区二区| 国语精品一区| 久久亚洲国产成人| 亚洲精品1区2区| 亚洲欧美日韩直播| 国产一区二区欧美日韩| 欧美1区3d| 亚洲午夜伦理| 免费成人性网站| 一区二区三区四区国产精品| 国产女同一区二区| 欧美激情片在线观看| 午夜视频一区在线观看| 欧美激情女人20p| 亚洲欧美三级在线| 亚洲国产精品美女| 国产精品久久看| 一区二区三区国产精品| 欧美天堂亚洲电影院在线播放| 亚洲综合色丁香婷婷六月图片| 老司机免费视频一区二区| 一区二区精品在线观看| 国内外成人免费视频| 欧美日韩一区二区三区在线观看免| 亚洲欧美经典视频| 亚洲精品少妇网址| 美女诱惑黄网站一区| 性色av一区二区三区红粉影视| 亚洲人体1000| 激情成人在线视频| 国产乱码精品一区二区三区忘忧草 | 亚洲第一久久影院| 久久黄色级2电影| 亚洲小说区图片区| 亚洲巨乳在线| 亚洲大片av| 国产三级精品在线不卡| 欧美日韩另类在线| 欧美高清不卡| 男人天堂欧美日韩| 久久久一本精品99久久精品66| 亚洲欧美日韩精品| 夜夜爽www精品| 亚洲精品久久久久久久久| 免费日韩一区二区| 久久这里只精品最新地址| 久久精品视频在线| 欧美制服第一页| 午夜精品福利视频| 亚洲欧美日韩一区二区| 亚洲一区二区高清视频| 夜夜嗨av一区二区三区网页 | 亚洲全部视频| 亚洲黄色av一区| 免费看的黄色欧美网站| 久久综合国产精品| 六十路精品视频| 欧美福利在线观看| 亚洲第一在线| 最新国产成人av网站网址麻豆 | 午夜精品福利一区二区三区av| 一区二区三区www| 一区二区欧美日韩视频| 亚洲视频自拍偷拍| 亚洲欧美国产日韩天堂区| 亚洲免费影视| 久久av红桃一区二区小说| 久久精品国产亚洲a| 久久久精品久久久久| 久久一本综合频道| 欧美激情在线狂野欧美精品| 欧美日韩三级| 国产欧美日韩亚洲一区二区三区| 国产亚洲欧美一级| 亚洲高清不卡一区| 一区二区久久| 久久精品国产清自在天天线| 老司机午夜精品| 亚洲国产一区在线| 亚洲视频在线看| 久久超碰97人人做人人爱| 免费在线亚洲欧美| 欧美三区在线观看| 国产午夜精品全部视频在线播放 | 久久精品视频播放| 亚洲国产成人精品视频| 一道本一区二区| 欧美一区二区视频观看视频|