我正在使用带有waitForAll参数= true的WaitForMultipleObject函数。这里使用了handle对象的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.)
}发布于 2012-06-20 16:35:40
根据MSDN的WaitForMultipleObjects函数定义:
返回值减去
WAIT_OBJECT_0表示满足等待的对象的数组索引。如果在调用期间有多个对象变为信号对象,则这是所有信号对象中索引值最小的信号对象的数组索引。
所以,你只需要检查:如果函数成功了-一切都好,如果没有,那么检查数组中有哪些句柄,哪些没有。这样你就可以找出有问题的句柄。
另外,我建议您看一下SignalObjectAndWait函数。它的行为是不同的,但也许你会发现它在某些情况下很有用。
发布于 2012-06-20 16:32:24
您说您正在使用WaitForMultipleObject,但您的代码显示的是WaitForSingleObject。假设您使用的是WaitForMultipleObject,并且如果您对参数设置为true,这意味着当向量中所有对象的状态都被通知时,函数将返回。
因此,在您的情况下,如果超时,则不会向您的任何对象发出信号。
https://stackoverflow.com/questions/11115581
复制相似问题