在 WaitForMultipleObjects 窗口中等待可变数量的事件

Posted

技术标签:

【中文标题】在 WaitForMultipleObjects 窗口中等待可变数量的事件【英文标题】:Wait for variable number of events inside WaitForMultipleObjects windows 【发布时间】:2020-10-07 08:07:30 【问题描述】:

通常,WaitForMultipleObjects 接受一个参数,告诉它该方法需要等待多少个事件。

DWORD WaitForMultipleObjects(
              DWORD        Count,
              const HANDLE *lpHandles,
              BOOL         bWaitAll,
              DWORD        dwMilliseconds
             );

我的要求是等待不固定数量的事件。因此,可以在上述函数中等待可变数量的事件,或者我可以在 Windows 中实现这一点的其他方式。

【问题讨论】:

可以动态创建第二个参数。 【参考方案1】:

你可以使用std::vector这样的容器:

#include <vector>
//...
int numHandles = 10;
std::vector<HANDLE> vHandles(numHandles);
//...
vHandles[0] = CreateThread(arguments);
vHandles[1] = CreateThread(arguments);
//... etc. 
WaitForMultipleObjects(vHandles.size(), vHandles.data(), TRUE, INFINITE); 

【讨论】:

如果您希望它在至少 one 事件处于信号状态时立即返回:WaitForMultipleObjects(vHandles.size(), vHandles.data(), FALSE, INFINITE); - 但请注意,如果发出多个事件信号,它将始终返回vector 中索引最小的那个。示例:如果vector 中的第一个事件在每次调用WaitForMultipleObjects 之间发出信号,这将是您将获得的唯一 事件作为回报。如果这成为问题,您可以在调用之间使用vHandles.back() std::swap 处理的事件。

以上是关于在 WaitForMultipleObjects 窗口中等待可变数量的事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中使用 waitformultipleobjects

等待 WaitForMultipleObjects

WaitForMultipleObjects与WSAWaitForMultipleEvents

WaitForMultipleObjects 不等待

WaitHandle.WaitAny 匹配 WaitForMultipleObjects 功能

WaitForMultipleObjects 到底啥意思,啥作用