Шаг 85 - Что такое Ожидающие функции

Win32 API поддерживает целый ряд функций, которые начинаются с Wait. Это ожидающие функции. Смысл их в том, что они блокируют выполнение потока до наступления какого-то события или тайм-аута.

WaitForMultipleObjects
WaitForMultipleObjectsEx
WaitForSingleObject
WaitForSingleObjectEx 
MsgWaitForMultipleObjects
MsgWaitForMultipleObjectsEx

Немного в стороне функция WaitCommEvent() предназначенная для работы с данными в последовательных портах.

Для того, чтобы пользоваться этими функциями должен быть объект синхронизации, который эти функции и проверяют. У этих объектов два состояния: установлен и сброшен. При вызове этих функций им передается указатель на объект синхронизации. Объект проверяется. Если он не установлен, то функция будет ждать пока не истечет тайм-аут. Все это время поток будет блокирован. Эти функции можно представить шаблонно так:

DWORD Wait........
(
	HANDLE hHandle,		// указатель на объект синхронизации
	DWORD dwMilliseconds	// тайм аут
);

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

Использование ожижающих функций и вообще сихронизации опасны появлением ситуации названной deadlock или тупиковой ситуацией, когда один поток ожидает освобождения ресурса от другого потока.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 6.05.2001