當前位置:
首頁 >
用MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()
發布時間:2025/3/12
40
豆豆
生活随笔
收集整理的這篇文章主要介紹了
用MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在多線程編程中,通常都需要線程間的同步,一個線程要等待另一個線程的事件才繼續執行,一般的做法是采用WaitForSingleObject和WaitForMultipleObjects()函數來實現。
但在實際的應用中,經常出現等待線程卡死的狀況,也就是說等待的事件一直無效。為什么事件一直無效呢?很多的情況是等待線程阻塞了另外的線程,使另外的線程無法設置事件有效。為什么會阻塞呢?原因就比較多了,需要具體問題具體分析。
?WaitForSingleObject和WaitForMultipleObjects()都是阻塞函數,事件無效就一直不返回,從而阻塞該線程,使該線程無法處理其他的事務,如果其他的線程發送消息過來,將得不到處理而不返回,從而將其他的線程也阻塞,造成相互等待,這就是臭名昭著的“死鎖”!!!
? 微軟提供了另外一個函數可以解決該問題,它就是MsgWaitForMultipleObjects()函數,該函數不但可以等待事件,還可以等待消息,從而處理消息,使線程不阻塞。該函數的具體解釋前參考MSDN或網絡。
一般的使用方法為:
[cpp] view plaincopy print?特別是在主線程和界面線程中推薦使用該函數,可以避免很多麻煩!!!
總結
以上是生活随笔為你收集整理的用MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Visual Studio 2008 查
- 下一篇: 函数调用规范__cdecl和__stdc