在WaitForMultipleObjects函数中使用它之后关闭事件

时间:2012-09-27 11:30:48

标签: c++ winapi events

我有一个事件对象向量,用于WaitForMultipleObjects函数。在发出事件信号后,我尝试使用close handle函数关闭事件,但是我收到类似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--;
}

1 个答案:

答案 0 :(得分:1)

在第一次迭代中它可能运行良好,但是一旦你关闭句柄,你就不能再次向WaitForMultipleObjects提供相同的向量:至少有一个句柄不再有效。

所以WaitForMultipleObjects会在那里返回一个错误,可能会在CloseHandle中稍后返回另一个错误。

这不是你的真实代码,对吗?因为在此代码段中,您并未真正检查返回的错误值。因为此代码段有更多错误需要注意:

  • 如果(...); - 空条件块
  • 因为上面的那个你可能正在访问带有非法索引的矢量
  • 您只检查WAIT_OBJECT_0 + 0,而不检查其他WAIT_OBJECT_0 + N