if 条件中的两个 WaitForSingleObject 而不是 WaitForMultipleObjects

Two WaitForSingleObject in a if condition instead of WaitForMultipleObjects

将 2 WaitForSingleObject 置于 'if' 条件中是否是一种有效的方法。我知道它可以使用 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 秒进入 "no trigger" 案例。
  • 一次超时,一次触发。您需要 1.5 秒才能到达 "trigger" 案例。
  • 两个都触发,第二个触发你就到了。

使用 WaitForMultipleObjects 你会得到这个行为:

  • 一个触发,第一个触发你就到了。
  • 两次超时,您需要 1.5 秒(或 3 秒,如果您指出)并到达 "no trigger" 案例。

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

这不会按照您想要的方式工作(无论如何,至少不会非常接近 WaitForMultipleObjects 会做的事情)。 || 产生一个序列点,因此它评估左侧,然后当且仅当产生错误结果时,它评估右侧。