Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АОПИ. Старое / АОПИ. Глава 2. Конспекты (02_04_19).rtf
Скачиваний:
65
Добавлен:
10.09.2019
Размер:
363.46 Кб
Скачать

Функция ожидания нескольких объектов

DWORD WaitForMultipleObjects(

IN DWORD nCount,

IN CONST HANDLE* hHandles,

IN BOOL bWaitAll,

IN DWORD dwMilliseconds

);

Краткое описание.

Функция WaitForMultipleObjects ждет до тех пор, пока один или все указанные объекты не окажутся в сигнальном состоянии или не истечет интервал времени ожидания.

Параметры и описание:

(1) nCount определяет количество интересующих объектов ядра.

(2) hHandles определяет массив дескрипторов объекта. Функция может указывать дескрипторы любого из следующих типов объектов: (1) уведомление об изменении, (2) консольный ввод, (3) событие, (4) мьютекс, (5) процесс, (6) семафор, (7) поток, (8) ожидаемый таймер, (9) уведомление о ресурсе памяти.

(3) bWaitAll принимает либо TRUE, либо FALSE. Если TRUE, то функция завершается, когда все объекты находятся в сигнальном состоянии. Если FALSE, то функция завершается, когда любой один объект переходит в сигнальное состояние.

(4) dwMilliseconds определяет интервал времени ожидания (в мс).

Возвращаемое значение указывает, какой объект перешел в сигнальное состояние.

Возвращаемое значение:

Примечание. WAIT_OBJECT_0 определяется как 0, а WAIT_ABANDONED_0 определяется как 0x00000080L

От WAIT_OBJECT_0 до (WAIT_OBJECT_0 + count – 1)

Если bWaitAll имеет значение TRUE, возвращаемое значение указывает, что у всех указанных объектов сигнальное состояние.

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

От WAIT_ABANDONED_0 до (WAIT_ABANDONED_0 + Count – 1)

Если bWaitAll имеет значение TRUE, возвращаемое значение указывает, что состояние всех указанных объектов сигнализируется и по крайней мере один из объектов является заброшенным объектом мьютекса.

Если bWaitAll имеет значение FALSE, возвращаемое значение минус WAIT_ABANDONED_0 указывает индекс массива hHandles заброшенного объекта мьютекса, который удовлетворил ожидание. Право собственности на объект мьютекса предоставляется вызывающему потоку, а мьютекс имеет несигнальное состояние.

WAIT_TIMEOUT (0x00000102L)

Истек интервал ожидания, и условия, заданные параметром bWaitAll, не выполняются.

WAIT_FAILED (0xFFFFFFFF)

Функция не выполнена (ошибка).

Дополнительная информация.

Будьте осторожны при вызове функций ожидания и кода, который прямо или косвенно создает окна. Поток, использующий функцию ожидания без интервала времени ожидания, может привести к зависанию системы. Поэтому, если у вас есть поток, который создает окна, используйте MsgWaitForMultipleObjects.

Функция ожидания нескольких объектов и сообщений

DWORD MsgWaitForMultipleObjects(

IN DWORD nCount,

IN CONST HANDLE* hHandles,

IN BOOL bWaitAll,

IN DWORD dwMilliseconds,

IN DWORD dwWakeMask

);

Краткое описание.

Функция завершает свою работу не только при переходе объектов в сигнальное состояние или истечения интервала ожидания, но и при поступлении сообщений, определенных маской dwWakeMask.

Параметры и описание:

(1) nCount определяет количество дескрипторов объектов в массиве, на которое указывает hHandles. Максимальное количество дескрипторов объекта - MAXIMUM_WAIT_OBJECTS минус один. Если этот параметр имеет значение 0, то функция ожидает только входного события.

(2) hHandles определяет массив дескрипторов объекта. Массив может содержать дескрипторы объектов разных типов, но не может содержать несколько копий одного и того же дескриптора. Функция может указывать дескрипторы любого из следующих типов объектов: (1) уведомление об изменении, (2) консольный ввод, (3) событие, (4) мьютекс, (5) процесс, (6) семафор, (7) поток, (8) ожидаемый таймер, (9) уведомление о ресурсе памяти.

(3) bWaitAll принимает либо TRUE, либо FALSE. Если TRUE, то функция завершается, когда все объекты находятся в сигнальном состоянии и было получено входное событие. Если FALSE, то функция завершается, когда любой один объект переходит в сигнальное состояние или получено входное событие. В этом случае возвращаемое значение указывает на объект, состояние которого вызвало возврат функции.

(4) dwMilliseconds определяет интервал времени ожидания (в мс).

(5) dwWakeMask определяет типы ввода, для которых дескриптор объекта события ввода будет добавлен в массив дескрипторов объекта. Принимает следующие значения:

QS_ALLEVENTS (0x04BF) — входное сообщение WM_TIMER, WM_PAINT, WM_HOTKEY или опубликованное сообщение находится в очереди.

QS_ALLINPUT (0x04FF) — любое сообщение находится в очереди.

QS_ALLPOSTMESSAGE (0x0100) — размещенное сообщение находится в очереди.

QS_HOTKEY (0x0080) — сообщение WM_HOTKEY находится в очереди. Функция реагирует на асинхронное сообщение, отличное от события аппаратного ввода.

QS_INPUT (0x407) — входящее сообщение находится в очереди.

QS_KEY (0x0001) — сообщение WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP или WM_SYSKEYDOWN находится в очереди.

QS_MOUSE (0x0006) — сообщение WM_MOUSEMOVE или сообщение кнопки мыши (WM_LBUTTONUP, WM_RBUTTONDOWN и т. д.) находится в очереди.

QS_MOUSEBUTTON (0x0004) — сообщение кнопки мыши (WM_LBUTTONUP, WM_RBUTTONDOWN и т. д.).

QS_MOUSEMOVE (0x0002) — сообщение WM_MOUSEMOVE находится в очереди.

QS_PAINT (0x0020) — сообщение WM_PAINT находится в очереди.

QS_POSTMESSAGE (0x0008) — размещенное сообщение находится в очереди.

QS_RAWINPUT (0x0400) — исходное входящее сообщение находится в очереди.

QS_SENDMESSAGE (0x0040) — сообщение, отправленное другим потоком или приложением, находится в очереди.

QS_TIMER (0x0010) — сообщение WM_TIMER находится в очереди.

Возвращаемое значение:

Примечание. WAIT_OBJECT_0 определяется как 0, а WAIT_ABANDONED_0 определяется как 0x00000080L

От WAIT_OBJECT_0 до (WAIT_OBJECT_0 + nCount – 1)

Если bWaitAll имеет значение TRUE, возвращаемое значение указывает, что у всех указанных объектов сигнальное состояние.

Если bWaitAll имеет значение FALSE, возвращаемое значение минус WAIT_OBJECT_0 указывает индекс массива hHandles объекта, который удовлетворил ожидание.

WAIT_OBJECT_0 + nCount

Новый входной тип, указанный в параметре dwWakeMask, доступен во входной очереди потока. Это значение также возвращается при возникновении системного события, которое требует действия потока, такого как активация переднего плана.

От WAIT_ABANDONED_0 до (WAIT_ABANDONED_0 + nCount – 1)

Если bWaitAll имеет значение TRUE, возвращаемое значение указывает, что состояние всех указанных объектов сигнализируется и по крайней мере один из объектов является заброшенным объектом мьютекса.

Если bWaitAll имеет значение FALSE, возвращаемое значение минус WAIT_ABANDONED_0 указывает индекс массива hHandles заброшенного объекта мьютекса, который удовлетворил ожидание. Право собственности на объект мьютекса предоставляется вызывающему потоку, а мьютекс имеет несигнальное состояние.

WAIT_TIMEOUT (258L)

Истекло время ожидания, и условия, заданные параметрами bWaitAll и dwWakeMask, не были выполнены.

WAIT_FAILED (0xFFFFFFFF)

Функция не выполнена (ошибка).

Домашнее задание.

Узнать про функции CreateProcess и CreateThread.