Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ if条件中的两个WaitForSingleObject,而不是WaitForMultipleObject_C++_Windows_Waitforsingleobject - Fatal编程技术网

C++ if条件中的两个WaitForSingleObject,而不是WaitForMultipleObject

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

将2WaitForSingleObject置于“如果”状态是否有效。我知道可以使用WaitForMuiltipleObject重新编写它。但我想知道我使用下面的代码是否会导致任何问题

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秒,然后进入“触发器”案例
  • 两个都触发,第二个触发后你就到了
使用WaitForMultipleObjects,您将获得以下行为:

  • 一个触发,第一个触发你就到了
  • 这两个超时都需要1.5秒(或者3秒,如果您指示的话),然后进入“无触发器”情况

因此,在当前代码中,在常见情况下,您将增加1.5秒的延迟,多个对象等待可以避免这种情况。

这不会按您希望的方式工作(至少不会像
WaitForMultipleObjects
那样工作)。
|
产生一个序列点,因此它计算左侧,然后当且仅当这产生一个错误结果时,它计算右侧。

排序锁是导致死锁的传统方式。忽略来自WFSO的错误总是一个坏主意。你知道如何正确地做,故意做错事没有任何意义。