WaitForMultipleObjects

WaitForMultipleObjects

我有一个事件对象向量,在WaitForMultipleObjects函数中使用。发出事件信号后,我尝试使用关闭句柄函数关闭事件,但出现类似Invalid handle was specified的错误。谁能说出问题所在吗?

std::vector<HANDLE> eventVector;
//..
// Entering data to vector

size_t count = eventVector.size();
DWORD signaledEvent;
While(count > 0)
{
  if (WAIT_OBJECT_0 == (signaledEvent =     WaitForMultipleObjects(handleVector.size(),handleVector.data(), false, INFINITE)))
  CloseHandle(handleVector[signaledEvent - WAIT_OBJECT_0]); // Here I am getting error.
  count--;
}

最佳答案

在第一次迭代中,它可能工作得很好,但是一旦关闭句柄,便无法再次向WaitForMultipleObjects提供相同的向量:至少有一个句柄不再有效。

因此,WaitForMultipleObjects会在此处向您返回错误,并且稍后可能在CloseHandle中返回另一个错误。

这不是您的真实代码,对不对?因为在此代码段中,您实际上并未检查返回的值是否有错误。由于此代码段有更多错误要注意:


如果(...); -空条件块
由于上面的一个,您可能正在访问带有非法索引的向量
您仅检查WAIT_OBJECT_0 + 0,而不检查其他WAIT_OBJECT_0 + N

09-11 13:01