gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:56:24 27 4
gpt4 key购买 nike

我有一个事件对象 vector ,用于 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 提供相同的 vector :至少有一个句柄不再有效。

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

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

  • 如果(...); - 空条件 block
  • 由于上述原因,您可能正在使用非法索引访问 vector
  • 您只检查 WAIT_OBJECT_0 + 0,而不检查其他 WAIT_OBJECT_0 + N

关于c++ - 在 WaitForMultipleObjects 函数中使用后关闭事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12620380/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com