2014-10-27 31 views
1

我正在寫一個小程序,該程序執行4個線程將執行funcA(),我用於事件對象和WaitForMultipleObject()使主線程塊,直到4個線程結束他們的任務很容易,我會在funA()中使用setEvent(),我想知道我應該怎麼做,如果SetEvent()執行失敗,主將永遠阻止?他們是否有辦法避免這種情況?我應該怎麼做,當SetEvent返回false

P.S:我只知道SetEvent在HANDLE無效時會失敗,是他們失敗的原因嗎?

+1

請提供更多的上下文/示例。另外,失敗後直接GetLastError()的價值是什麼? – NuSkooler 2014-10-27 15:18:29

+0

@NuSkooler代碼很簡單,我的代碼沒有錯,我只是想讓代碼健壯,所以我使用if(false == SetEvent(myHandle))'where where,when the condition is true,myHandle沒有設置信號,所以我只是簡單地返回false,但我認爲這不是很強大,因爲我的主線程將永遠等待myHandle,我應該使用CloseHandle(myHandle)來避免這種情況嗎? – 2014-10-27 15:52:08

+1

SetEvent()失敗是一個*非常*討厭的事故。這很糟糕,你要麼完全忽略了失敗的可能性,因爲你的程序狀態是如此受損,以至於診斷只能提供虛假的線索。或者您立即終止您的程序,以免再造成進一步的傷害。 – 2014-10-27 16:21:10

回答

0

在C++中,您可以拋出一個C++異常來故意使進程崩潰。

在C中,您可以使用Windows API函數RaiseException很好地使進程崩潰,以引發Windows結構化異常。