我有一个std::vector
句柄对象。我必须等待这些句柄对象在WaitForMultipleObjects
函数中使用。因为它是一个向量,所以在使用它时出现错误WaitForMultipleObjects
:
std::vector<HANDLE> events;
// ...
WaitForMultipleObjects(events.size(), events, true, INFINITE);
有没有办法做到这一点?
我有一个std::vector
句柄对象。我必须等待这些句柄对象在WaitForMultipleObjects
函数中使用。因为它是一个向量,所以在使用它时出现错误WaitForMultipleObjects
:
std::vector<HANDLE> events;
// ...
WaitForMultipleObjects(events.size(), events, true, INFINITE);
有没有办法做到这一点?
如果您有最新版本的 STL,最好使用:
WaitForMultipleObjects(events.size(), events.data(), true, INFINITE);
对于较旧的 STL,如果 .data() 不能用作向量上的方法,则可以使用 &events[0]。
如果您查看文档,WaitForMultipleObject
您会发现第二个参数是指针,而不是std::vector
. std::vector
不能使用该类来代替指针或本机数组。
您可以做的唯一一种方法是创建一个临时“数组”,并将所有句柄复制到它,并将其用作参数。
查尔斯建议的另一种方法是使用&vector[0]
或按照托尼的建议使用vector.data()
(如果可用)。
你应该这样做
WaitForMultipleObjects(events.size(), &events[0], true, INFINITE);
这是可移植的,也是可行的。
到达底层向量缓冲区的规范方法是
&events[0]
所以你可以这样做:
WaitForMultipleObjects(events.size(), &events[0], true, INFINITE);
另请参阅此类似问题。