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