- /*
- 消息死鎖
- 程序通過SendMessage發送消息之後,在接收消息的窗口過程返回之前,發送消息
- 的線程都不能再執行。如果此時接收消息的線程又把控制權交給了其它的線程,那麼
- 發送消息的線程便不能再繼續執行了,因爲接收消息的窗口過程已無法進行返回。
- 如是接收消息的線程與發送消息的線程共用一個消息隊列的話,就會發生死鎖。
- 所以我們要記住接收消息的線程不能隨便地將控制權交出去,當調用以下函數的時候
- 控制權會立即被交出去,所以要注意:
- DialogBox
- DialogBoxIndirect
- DialogBoxIndirectParam
- DialogBoxParam
- GetMessage
- MessageBox
- PeekMessage
- SendMessage
- 爲了盡是避免潛在的死鎖,應該多使用SendNotifyMessage和SendMessageTimeOut,
- 另一方面,也可以檢查一下其接收到的消息是否來自另外一個線程,函數InSendMessage
- 和InSendMessageEx可以完成這個功能。在調用上面列表中的任意一個函數之前,
- 應該先調用InSendMessage,InSendMessageEx。如果這兩個函數返回TRUE,窗口
- 過程就要在任意一個可以導致交出控制權的函數之前調用ReplyMessage。
- 廣播消息:
- 簡單地說,消息廣播就是將一個消息發送到系統中的多個接收者,
- BroadcastSystemMessage可以完成這個功能, 指定消息的接收者即可。
- 不是指定個別的接收者,你必須指定一種或多種接收者,比如應用程序,可安裝的
- 驅動,網絡驅動,系統級設備驅動等。系統會將消息發送到指定的類型的接收者的
- 所有成員。
- */
消息與消息隊列三(譯自MSDN的About Message and Message Queue)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.