在我的一个项目中,我创建了多个auto reset events
和两个线程,这些线程用于WaitForMultipleObjects
在继续运行之前等待某些事件,例如:
HANDLE hTerminateEvent = CreateEvent(...); // auto reset
HANDLE hStateChangedEvent = CreateEvent(...); // auto reset
void thread1Func()
{
HANDLE handles[2] = { hTerminateEvent, hStateChangedEvent };
WaitForMultipleObjects(2, handles, FALSE/*bWaitAll*/, INFINITE);
...
}
void thread2Func()
{
HANDLE handles[2] = { hTerminateEvent, hStateChangedEvent };
WaitForMultipleObjects(2, handles, FALSE/*bWaitAll*/, INFINITE);
...
}
我以前认为一旦hTerminateEvent
被单打,两个线程都会被唤醒,但对于自动重置事件似乎并非如此,一个被唤醒的事件是随机的,在一个唤醒后,它将重置hTerminateEvent
为未发出信号。
我的问题是如何解决这个问题:通过使用手动重置事件?或者是否有任何设计可以解决这个问题?谢谢!