Используйте 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() (если доступно).

Другие вопросы по тегам