Multithreading SetEvent返回false时我应该怎么做

Multithreading SetEvent返回false时我应该怎么做,multithreading,winapi,events,sync,Multithreading,Winapi,Events,Sync,我正在写一个小程序,这个程序执行4个线程,将执行funcA(),我使用事件对象和WaitForMultipleObject()使主线程阻塞,直到4个线程完成任务,很容易知道我将在funA()中使用setEvent(),我想知道如果setEvent()执行失败该怎么办,总水管总是堵塞?有什么办法可以避免吗 S:我只知道StEvCET在句柄无效时会失败,它们的失败原因是否更多? < P> C++中,你可以抛出C++异常来故意破坏进程。 在C语言中,使用Windows API函数可以很好地使进程崩溃

我正在写一个小程序,这个程序执行4个线程,将执行funcA(),我使用事件对象和WaitForMultipleObject()使主线程阻塞,直到4个线程完成任务,很容易知道我将在funA()中使用setEvent(),我想知道如果setEvent()执行失败该怎么办,总水管总是堵塞?有什么办法可以避免吗


S:我只知道StEvCET在句柄无效时会失败,它们的失败原因是否更多?

< P> C++中,你可以抛出C++异常来故意破坏进程。
在C语言中,使用Windows API函数可以很好地使进程崩溃,从而引发Windows结构化异常。

请提供更多上下文/示例。另外,失败后GetLastError()的值是多少?@NuSkooler代码很简单,我的代码没有错,我只是想让我的代码更健壮,所以我使用
if(false==SetEvent(myHandle))
每一个地方,当条件为true时,myHandle没有设置信号,所以我只是简单地返回false,但我认为这并不是很健壮,因为我的主线程将永远等待myHandle,我应该使用CloseHandle(myHandle)来避免这种情况吗?SetEvent()失败是一个极其严重的灾难。糟糕的是,您要么完全忽略失败的可能性,因为您的程序状态已损坏,诊断只会给出错误的线索。或者您立即终止您的程序,这样就不会造成进一步的伤害。如果您遇到意外的程序状态,您将无法合理地对此采取任何措施。要么立即终止程序(当使用C时),要么抛出异常而不捕获它,并让
unexpected()
-处理程序执行其职责。另外,
SetEvent
返回一个
BOOL
。您应该将其与
TRUE
FALSE
进行比较,而不是
TRUE
FALSE
进行比较。如果您使用的是C,则可以使用RaiseException引发Windows异常。