消息與消息隊列三(譯自MSDN的About Message and Message Queue)

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