Время ожидания истекло из 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 для параметра, это означает, что функция возвращается, когда сигнализируется состояние всех объектов в векторе.
так что в вашем случае, если время истекло, ни один из ваших объектов не будет сигнализирован.