Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода Процессы и потоки.doc
Скачиваний:
7
Добавлен:
14.07.2019
Размер:
401.92 Кб
Скачать

OpenSemaphore

Описание Функция OpenSemaphore открывает существующий поименованный объект семафора. Семафор может быть предварительно создан с использованием CreateSemaphore. Если дескриптор, возвращаемый функцией, уже не тре­буется, для его закрытия следует воспользоваться функцией CloseHandle.

Синтаксис HANDLE OpenSemaphore(DWORD dwAccessFlag, BOOL bInherit, LPCTSTR lpszSemName)

Параметры dwAccessFlag DWORD: Требуемый тип доступа к объекту семафора. bInherit BOOL: Если дескриптор семафора может наследоваться порожденными процессами, этот параметр должен быть равен TRUE , а в противном слу­чае - FALSE. lpszSemName LPCTSTR: Указатель на строку, завершающуюся нулевым символом и со­держащую имя семафора с учетом регистра.

Возвращаемое значение HANDLE: Если выполнение функции оказывается успешным, возвращается дескриптор семафора. В противном случае возвращается NULL. Для возврата расширенной информации об ошибке используется функция GetLastError.

Включаемый файл winbase.h

См. также DuplicateHandle, OpenEvent, OpenMutex, CreateSemaphore, CloseHandle.

Пример См. пример применения функции CreateSemaphore.

TryEnterCriticalSection

Описание Функция TryEnterCriticalSection предпринимает попытку войти в критический участок кода без блокировки. Если вызов этой функции окажется успешным, тогда вызывающая нить приобретет права владения критичес­ким участком кода. В противном случае осуществляется немедленный воз­врат из данной функции.

Синтаксис DWORD TryEnterCriticalSection (LPCRITICAL_SECTION lpCriticalSection)

Параметры lpCriticalSection LPCRITICAL_SECTION: Объект критического участка кода.

Возвращаемое значение DWORD: Если вход в критический участок кода будет успешным либо текущая нить уже владеет этим критическим участком кода, возвращается ненулевое значение. Если критический участок кода уже принадлежит дру­гой нити, возвращается 0.

Включаемый файл winbase.h

См. также DeleteCriticalSection, EnterCriticalSection, InitializeCriticalSection, LeaveCriticalSection.

WaitForMultipleObjects

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

Синтаксис DWORD WaitForMultipleObjects(DWORD dwObjectCount, CONST HANDLE* lphObjectList, BOOL bWaitAll, DWORD dwTimeoutInterval)

Параметры dwObjectCount DWORD: Количество дескрипторов объектов в массиве lphObjectList. Максимально допустимое число дескрипторов объектов равно MAXIMUM_WAIT_OBJECTS. lphObjectList CONST HANDLE*: Указатель на массив дескрипторов объектов. У всех дескрипторов должны быть права досту­па типа SYNCHRONIZE. bWaitAll BOOL: Если установлено значение FALSE, выполняется ожидание перехода в сигнальное состояние любого объекта, а если TRUE – то всех объектов. dwTimeoutInterval DWORD: Если установлено значение 0, проверяется состояние всех объектов и сразу же осуществляется возврат из функции. Если же уста­новлено значение INFINITE, время ожидания не используется. Иначе па­раметр определяет число миллисекунд времени ожидания.

Возвращаемое значение DWORD: Если выполнение функции оказывается успешным, возвращаемое значение определяет объект, который обусловил возврат из данной функции ожидания. В противном случае возвращается WAIT_FAILED. Для возврата кода ошибки используется функция GetLastError. Возмож­ные значения возврата сведены в табл. 4.

Таблица 4 Типы объектов, используемых в функции WaitForMultipleObjects

Объект

Описание

Уведомление об изменении

Этот дескриптор возвращает FindFirstChangeNotification

Ввод с консоли

Этот дескриптор возвращает CreateFile или GefStdHandle

Событие

Этот дескриптор возвращает CreateEvent или OpenEvent

Мьютекс

Этот дескриптор возвращает CreateMutex или OpenMutex

Процесс

Этот дескриптор возвращает CreateProcess или OpenProcess

Семафор

Этот дескриптор возвращает CreateSemaphore или OpenSemaphore

Нить

Этот дескриптор возвращает CreateProcess, CreateThread или CreateRemoteThread

Таймер

Этот дескриптор возвращает CreateWaitableTimer или OpenWaitableTimer

Включаемый файл winbase.h

См. также WaitForSingleObject.

Пример См. пример применения функции TlsAlloc.

Таблица 5 Значения, возвращаемые функцией WaitForMuItipleObjects

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

Что означает

TRUE

Все объекты находятся в сигнальном состоянии, а значение параметра bWaitAII равно TRUE

WAIT_OBJECT_0 – WAIT_OBJECT 0 + dwObjectCount-1

Первый объект находится в сигнальном состоянии, а значение параметра bWaitAll равно FALSE

WAIT_ABANDONED_0 ~ WAIT_ ABANDONED 0 + dwObjectCount-1

Первый мьютекс отвергнут, а значение параметра bWaitAII равно FALSE

WAIT_TIMEOUT

Время ожидания истекло до того, как объекты смогли удовлетворить условию ожидания