Время ожидания истекло из WaitForSingleObject

Я использую WaitForMultipleObject функция с параметром waitForAll = true. Здесь с помощью std::vector объекта дескриптора, чтобы ждать. Если тайм-аут этой функции истек, то как я могу определить, какое ожидание для какого дескриптора истекло?

if(WAIT_OBJECT != WaitForMultipleObject(vector.size(), vector.data(), true, 16000))
{
//get the event that causes the wait to time out(assume that only one object is timed out.others are successfully set.)
}

2 ответа

Решение

По данным MSDN WaitForMultipleObjects определение функции:

Возвращаемое значение минус WAIT_OBJECT_0 указывает индекс массива объекта, который удовлетворил ожидание. Если более одного объекта стало сигнализироваться во время вызова, это индекс массива сигнализируемого объекта с наименьшим значением индекса из всех сигнализируемых объектов.

Итак, вам просто нужно проверить: если функция завершилась успешно - все в порядке, если нет, то проверьте, какие именно дескрипторы были в массиве, а какие - нет. Таким образом, вы можете определить проблемную ручку.

Кроме того, я предлагаю вам взглянуть на SignalObjectAndWait функция. Его поведение отличается, но, возможно, вы найдете его полезным в некоторых случаях.

Вы сказали, что используете WaitForMultipleObject, но ваш код показывает WaitForSingleObject. Предполагая, что вы используете WaitForMultipleObject, и если вы сказали true для параметра, это означает, что функция возвращается, когда сигнализируется состояние всех объектов в векторе.

так что в вашем случае, если время истекло, ни один из ваших объектов не будет сигнализирован.

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