在 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与WSAWaitForMultipleEvents