C++ if条件中的两个WaitForSingleObject,而不是WaitForMultipleObject
将2WaitForSingleObject置于“如果”状态是否有效。我知道可以使用WaitForMuiltipleObject重新编写它。但我想知道我使用下面的代码是否会导致任何问题C++ if条件中的两个WaitForSingleObject,而不是WaitForMultipleObject,c++,windows,waitforsingleobject,C++,Windows,Waitforsingleobject,将2WaitForSingleObject置于“如果”状态是否有效。我知道可以使用WaitForMuiltipleObject重新编写它。但我想知道我使用下面的代码是否会导致任何问题 CHandle m_hEventUDP; CHandle m_hEventTCP; if (WaitForSingleObject(m_hEventUDP, 1500) == WAIT_OBJECT_0 || WaitForSingleObject(m_hEventTCP, 1500) == WA
CHandle m_hEventUDP;
CHandle m_hEventTCP;
if (WaitForSingleObject(m_hEventUDP, 1500) == WAIT_OBJECT_0 || WaitForSingleObject(m_hEventTCP, 1500) == WAIT_OBJECT_0)
{
//An event is triggered(among 2)
//I don't care which event is triggered among 2, either of one is Okay for me
}
else
{
//No event is triggered
}
这将等待第一个,如果没有发生(并且超时),则只会等待第二个。您可以有三种情况之一:
- 两个都超时了。你需要3秒钟,然后进入“无触发”案例
- 一次超时,一次触发。你需要1.5秒,然后进入“触发器”案例
- 两个都触发,第二个触发后你就到了
- 一个触发,第一个触发你就到了
- 这两个超时都需要1.5秒(或者3秒,如果您指示的话),然后进入“无触发器”情况
因此,在当前代码中,在常见情况下,您将增加1.5秒的延迟,多个对象等待可以避免这种情况。这不会按您希望的方式工作(至少不会像
WaitForMultipleObjects
那样工作)。|
产生一个序列点,因此它计算左侧,然后当且仅当这产生一个错误结果时,它计算右侧。排序锁是导致死锁的传统方式。忽略来自WFSO的错误总是一个坏主意。你知道如何正确地做,故意做错事没有任何意义。