0

我有一个事件对象向量,它在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--;
}
4

1 回答 1

1

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

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

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

  • 如果(...); - 空条件块
  • 由于上述原因,您可能正在使用非法索引访问向量
  • WAIT_OBJECT_0 + 0只检查,而不是其他WAIT_OBJECT_0 + N
于 2012-09-27T11:39:07.740 回答