等待WaitForSingleObject超时

时间:2012-06-20 08:27:48

标签: c++ winapi waitformultipleobjects

我正在使用WaitForMultipleObject函数和waitForAll参数= true。这里使用std::vector句柄对象等待。如果此函数超时,那么我如何识别等待哪个句柄超时??。

if(WAIT_OBJECT != WaitForMultipleObject(vector.size(), vector.data(), true, 16000))
{
//get the event that causes the wait to time out(assume that only one object is timed out.others are successfully set.)
}

2 个答案:

答案 0 :(得分:1)

根据MSDN的WaitForMultipleObjects函数定义:

  

返回值减去WAIT_OBJECT_0表示满足等待的对象的数组索引。如果在调用期间发出多个对象的信号,则这是信号对象的数组索引,其中所有信号对象的索引值最小。

所以,你只需要检查一下:如果函数成功了 - 如果不是,那就好了,而不是检查数组中的句柄类型和不存在的句柄类型。因此,你可以找出有问题的句柄。

另外,我建议你看看SignalObjectAndWait功能。它的行为是不同的,但也许你会发现它在某些情况下很有用。

答案 1 :(得分:0)

你说你正在使用WaitForMultipleObject,但你的代码显示的是WaitForSingleObject。假设您正在使用WaitForMultipleObject,并且如果您对参数表示true,则表示函数在向量中的所有对象的状态发出信号时返回。

所以在你的情况下,如果它超时,你的任何物体都不会发出信号。