-2

将 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
}
4

2 回答 2

2

那将等待第一个,如果没有发生(并且超时),那么它将等待第二个。您可以有以下三种情况之一:

  • 两者都超时。您需要 3 秒钟,然后到达“无触发”情况。
  • 一次超时,一次触发。您需要 1.5 秒才能到达“触发”案例。
  • 两者都触发,一旦第二个触发,您就会到达那里。

使用 WaitForMultipleObjects 您将获得以下行为:

  • 一个触发,您会在第一个触发时立即到达那里。
  • 两者都超时,您需要 1.5 秒(或 3,如果您指出)并进入“无触发”情况。

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

于 2015-12-23T07:27:56.107 回答
0

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

于 2015-12-23T07:28:08.077 回答