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

时间:2015-12-23 07:20:19

标签: c++ windows waitforsingleobject

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

2 个答案:

答案 0 :(得分:2)

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

  • 两次超时。你需要3秒钟才能进入“无触发”状态。
  • 一次出来,一次触发。你需要1.5秒才能进入“触发”状态。
  • 两个触发器,一旦第二个触发,你就会到达那里。

使用WaitForMultipleObjects,您将得到以下行为:

  • 一个触发器,一旦第一个触发,你就会到达那里。
  • 两次超时,你需要1.5秒(或3,如果你指明)并进入“无触发”的情况。

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

答案 1 :(得分:0)

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