基本上,我想做这样的事情:
HANDLE hThread1 = CreateThread(...);
HANDLE hThread2 = CreateThread(...);
HANDLE hThread3 = CreateThread(...);
...
WaitForMultipleObjects( 3, {hThread1,hThread2,hThread3}, FALSE, INFINITE );
而不是这个:
HANDLE hThread[3];
hThread[0] = CreateThread(...);
hThread[1] = CreateThread(...);
hThread[2] = CreateThread(...);
...
WaitForMultipleObjects( 3, hThread, FALSE, INFINITE );
我找到的唯一解决方案是使用 std::initializer_list
,但显然 WaitForMultipleObjects()
不接受 std::initializer_list
最佳答案
然后写一个包装器。
DWORD wait_for_multiple_objects(
std::initializer_list<HANDLE> handles,
bool wait_all = false, DWORD time = INFINITE
) {
return WaitForMultipleObjects(
handles.size(), &*handles.begin(), wait_all, time
);
}
现在您可以:
wait_for_multiple_objects({ handle1, handle2, handle3 });
这显然需要支持 initializer_list
的 C++11 编译器. std::vector<HANDLE>
如果您希望传递一个已经存在的参数,则可能是更好的参数类型。或者更通用的迭代器/范围接口(interface),但这留给读者作为练习。
关于c++ - 如何将初始化列表作为函数参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004102/