Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Функции ожидания на диспетчерских объектах



Функция 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; Прочитано: 435 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...