C++ 在WaitForMultipleObjects函数中使用后关闭事件

C++ 在WaitForMultipleObjects函数中使用后关闭事件,c++,winapi,events,C++,Winapi,Events,我有一个事件对象向量,用于WaitForMultipleObjects函数。在发出事件信号后,我尝试使用close handle函数关闭事件,但收到了一个错误,如指定了无效句柄。谁能告诉我问题出在哪里 std::vector<HANDLE> eventVector; //.. // Entering data to vector size_t count = eventVector.size(); DWORD signaledEvent; While(count > 0) {

我有一个事件对象向量,用于
WaitForMultipleObjects
函数。在发出事件信号后,我尝试使用close handle函数关闭事件,但收到了一个错误,如指定了无效句柄<代码>。谁能告诉我问题出在哪里

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--;
}
std::vector eventVector;
//..
//将数据输入向量
size\u t count=eventVector.size();
德沃德信号事件;
而(计数>0)
{
if(WAIT_OBJECT_0==(signaledEvent=WaitForMultipleObjects(handleVector.size()、handleVector.data()、false、INFINITE)))
CloseHandle(handleVector[signaledEvent-WAIT_OBJECT_0])//这里我得到了一个错误。
计数--;
}

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

因此,
WaitForMultipleObjects
会在那里返回一个错误,稍后在
CloseHandle
中可能会返回另一个错误

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

  • 如果(…);-空条件块
  • 由于上述原因,您可能正在使用非法索引访问向量
  • 您只选中了
    WAIT\u OBJECT\u 0+0
    ,而不选中其他
    WAIT\u OBJECT\u 0+N

感谢您宝贵的回答。但是在运行这段代码的时候,我在第一次迭代中遇到了错误。卸下闭合手柄后,其工作正常。是的,这不是我真正的代码,它只是一个示例。但是我也没有检查实际代码中的错误值。感谢您添加更多关于这方面的信息。但是我没有理解你在最后一段提到的那些观点。这个空的条件块在哪里?我检查了这些值(向量的索引值),并验证了索引是否正确。在这里,我只需要检查WAIT_OBJECT_0,就可以知道eventVector中的任何事件都已设置。
1
从if行
2
中删除最后一个分号。您必须比较“if(-WAIT_OBJECT_0WAIT\u OBJECT\u 0+N
仍然是一个有效的返回值。好的。我同意这一点。很抱歉将分号放错了位置。否则,我认为我的代码是可以的。bocs在移除关闭句柄后,它可以正常工作