4

我有一个std::vector句柄对象。我必须等待这些句柄对象在WaitForMultipleObjects函数中使用。因为它是一个向量,所以在使用它时出现错误WaitForMultipleObjects

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

有没有办法做到这一点?

4

4 回答 4

4

如果您有最新版本的 STL,最好使用:

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

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

于 2012-06-19T08:48:03.043 回答
1

如果您查看文档,WaitForMultipleObject您会发现第二个参数是指针,而不是std::vector. std::vector不能使用该类来代替指针或本机数组。

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

查尔斯建议的另一种方法是使用&vector[0]或按照托尼的建议使用vector.data()(如果可用)。

于 2012-06-19T08:25:26.717 回答
1

你应该这样做

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

这是可移植的,也是可行的。

于 2012-06-19T08:35:28.973 回答
1

到达底层向量缓冲区的规范方法是

&events[0]

所以你可以这样做:

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

另请参阅此类似问题

于 2012-06-19T08:49:47.890 回答