Используйте std::vector в WaitForMultipleObjects()
У меня есть std::vector
ручки объектов. Я должен ждать на этих объектах дескриптора для использования в WaitForMultipleObjects
функция. Так как это вектор, я получаю ошибку при использовании его в WaitForMultipleObjects
:
std::vector<HANDLE> events;
// ...
WaitForMultipleObjects(events.size(), events, true, INFINITE);
Есть какой-либо способ сделать это?
4 ответа
Предпочтительно, если у вас есть последняя версия STL, вы должны использовать:
WaitForMultipleObjects(events.size(), events,data(), true, INFINITE);
В старых STL вы можете использовать &events[0], если.data() не доступен как метод для вектора.
Вы должны сделать это так
WaitForMultipleObjects(events.size(), &events[0], true, INFINITE);
Это портативный и способ сделать это.
Канонический способ добраться до нижележащего векторного буфера
&events[0]
Так что вы можете сделать это:
WaitForMultipleObjects(events.size(), &events[0], true, INFINITE);
Также посмотрите этот похожий вопрос.
Если вы посмотрите на документацию для WaitForMultipleObject
вы увидите, что второй аргумент является указателем, а не std::vector
, std::vector
Класс не может использоваться вместо указателя или собственного массива.
Единственный способ сделать это - создать временный "массив", скопировать в него все дескрипторы и использовать его в качестве аргумента.
Другой способ, предложенный Чарльзом, заключается в использовании &vector[0]
или как предложено Тони использовать vector.data()
(если доступно).