0

我正在使用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.)
}
4

2 回答 2

1

根据MSDN的WaitForMultipleObjects函数定义:

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

因此,您只需要检查:函数是否成功 - 一切正常,如果没有,则检查数组中有哪些类型的句柄,哪些没有。因此,您可以找出有问题的句柄。

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

于 2012-06-20T08:35:39.503 回答
0

您说您正在使用 WaitForMultipleObject,但您的代码显示的是 WaitForSingleObject。假设您正在使用 WaitForMultipleObject 并且如果您对参数说真,则意味着当向量中所有对象的状态都发出信号时,该函数将返回。

因此,在您的情况下,如果超时,则不会向您的任何对象发出信号。

于 2012-06-20T08:32:24.447 回答