我正在使用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.)
}
答案 0 :(得分:1)
根据MSDN的WaitForMultipleObjects
函数定义:
返回值减去
WAIT_OBJECT_0
表示满足等待的对象的数组索引。如果在调用期间发出多个对象的信号,则这是信号对象的数组索引,其中所有信号对象的索引值最小。
所以,你只需要检查一下:如果函数成功了 - 如果不是,那就好了,而不是检查数组中的句柄类型和不存在的句柄类型。因此,你可以找出有问题的句柄。
另外,我建议你看看SignalObjectAndWait
功能。它的行为是不同的,但也许你会发现它在某些情况下很有用。
答案 1 :(得分:0)
你说你正在使用WaitForMultipleObject,但你的代码显示的是WaitForSingleObject。假设您正在使用WaitForMultipleObject,并且如果您对参数表示true,则表示函数在向量中的所有对象的状态发出信号时返回。
所以在你的情况下,如果它超时,你的任何物体都不会发出信号。