2014-10-27 27 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结构化异常。