![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Функция WaltForSingleObject
DWORD WaitForSingleObject(HANDLE hHandle. DWORD dwMillisecond);
Когда поток вызывает эту функцию, параметр hHandle идентифицирует объект ядра, поддерживающий состояния «свободен-занят». Параметр dwMillisecond задает тайм-аут (time out) — интервал времени, спустя которое функция возвращает управление, даже если объект остается в занятом состоянии. Если параметр dwMillisecond имеет нулевое значение, то функция только проверяет состояние объекта и возвращает управление немедленно. Константа INFINITE в качестве значения dwMillisecond задает бесконечное значение тайм-аута.
Возвращаемым значением функции чаще всего является одна из следующих констант:
WAIT_OBJECT_0 - контролируемый объект ядра перешел в свободное состояние;
WAIT_TIMEOUT - истек интервал тайм-аута, а контролируемый объект ядра остается в занятом состоянии;
WAIT_FAILED - функция завершилась с ошибкой. Для получения дополнительной
информации об ошибке нужно использовать функцию GetLastError.
Функция WaitForMultipleObjects
DWORD WaitForMultipleObjects(DWORD nCount, CONST HANDLE* lpHandles, BOOL fWaitAll, DWORD dwMilliseconds);
Она работает так же, как и функция WaitForSingleObject, но при этом позволяет ждать освобождения сразу нескольких объектов или какого-то одного объекта из заданного списка.
Параметр nCount определяет количество интересующих вас объектов ядра. Его значение должно быть в пределах от 1 до MAXIMUM_WAIT_OBJECTS. В заголовочных файлах Windows эта константа имеет значение 64. Параметр lpHandles содержит указатель на массив дескрипторов объектов ядра. В массиве могут содержаться дескрипторы объектов разных типов.
Функция WaitForMultipleObjects приостанавливает поток и заставляет его ждать освобождения либо всех заданных объектов ядра, либо одного из них. Параметр fWaitAll определяет поведение функции. Значение TRUE задает режим ожидания освобождения всех указанных объектов, a FALSE — только одного из них. В последнем случае код возврата функции содержит информацию о том, какой именно объект освободился.
Возвращаемое функцией значение сообщает, почему возобновилось выполнение вызвавшего ее потока. Значения WAIT_TIMEOUT и WAIT_FAILED интерпретируются по аналогии с функцией WaitForSingleObject. Если параметр fWaitAll равен TRUE и все объекты перешли в свободное состояние, то функция возвращает значение WAIT_OBJECT_0. Если же fWaitAll имеет значение FALSE, то функция возвращает управление, как только освобождается любой из объектов. При этом ее код возврата лежит в интервале от WAIT_OBJECT_0 до WAIT_OBJECT_0 + nCount - 1. Иными словами, если из кода возврата вычесть константу WAIT_OBJECT_0, то вы получите индекс освободившегося объекта в массиве lpHandles.
Вот пример обработки кода возврата функции WaitForMultipleObjects:
…
HANDLE hp[3];
hp[0] = hProcessO;
hp[l] = hProcessl;
hp[2] = hProcess2;
DWORD dw = WaitForMultipleObjects(hp, FALSE. 4000);
…
Дата публикования: 2015-10-09; Прочитано: 479 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!