在WaitForMultipleObjects()中使用std :: vector

时间:2012-06-19 08:21:09

标签: c++ vector waitformultipleobjects

我有std::vector个句柄对象。我必须等待这些句柄对象在WaitForMultipleObjects函数中使用。由于它是一个向量,我在WaitForMultipleObjects中使用它时遇到错误:

std::vector<HANDLE> events;
// ...
WaitForMultipleObjects(events.size(), events, true, INFINITE);

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:3)

最好是,如果你有STL的最新版本,你应该使用:

WaitForMultipleObjects(events.size(), events.data(), true, INFINITE);

对于较旧的STL,如果.data()不能用作矢量的方法,则可以使用&amp; events [0]。

答案 1 :(得分:1)

如果查看WaitForMultipleObject的文档,您会看到第二个参数是指针,而不是std::vector。 <{1}}类不能用于代替指针或本机数组。

唯一的你可以做的一种方法是创建一个临时的“数组”,并将所有句柄复制到它,并将其用作参数。

根据Charles的建议,另一种方法是使用std::vector或Tony建议使用&vector[0](如果可用)。

答案 2 :(得分:1)

你应该这样做

WaitForMultipleObjects(events.size(), &events[0], true, INFINITE);

这是便携式的,也是可行的方式。

答案 3 :(得分:1)

获取底层矢量缓冲区的规范方法是

&events[0]

所以你可以这样做:

WaitForMultipleObjects(events.size(), &events[0], true, INFINITE);

另见this similar question