Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 196


Последний, четвертый аргумент, - это указатель на строку, содержа­щую имя семафора.

При успешном завершении функция возвращает хэндл созданного сема­фора. Возвращение NULL сигнализирует о том, что произошла ошибка.

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

Перед завершением потока, использующего семафор, последний дол­жен быть освобожден. Это делается с помощью функции ReleaseSemaphoreQ, описание которой, взятое из файла winbase.h, приве­дено ниже:

WINBASEAPI BOOL WINAPI ReleaseSemaphore(HANDLE hSemaphore,

LONG IReleaseCount, LPLONG IpPreviousCount);

Первый аргумент - это хэндл семафора, полученный с помощью функции CreateSemaphore(). Второй аргумент определяет, какое значение

235

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

Таблица 55. Флаги доступа к семафору

Параметр

Описание

SEMAPHORE_ALL_ACCESS

SEMAPHORE_MODIFY_STATE

SYNCHRONIZE

Устанавливает все возможные флаги доступа к семафору

Разрешается изменение счетчика ресурсов в функции ReleaseSemaphoreQ Разрешается использование в любой из ожидаю­щих функций сигнала об изменении состояния семафора

Поток, которому заведомо известно, что семафор уже создан, может не создавать семафор, а открыть его с помощью функции OpenSemaphoreQ. Ниже приведено описание этой функции, взятое из файла winbase.h:

WINBASEAPI HANDLE WINAPI OpenSemaphoreA(DWORD dwDesiredAccess,

BOOL blnheritHandle, LPCSTR IpName);

WINBASEAPI HANDLE WINAPI OpenSemaphoreW(DWORD dwDesiredAccess,

BOOL blnheritHandle, LPCWSTR IpName);

#ifdefUNICODE

#defme OpenSemaphore OpenSemaphoreW

#else

#defme OpenSemaphore OpenSemaphoreA

#endif// ! UNICODE

Первый аргумент определяет уровень доступа к семафору и может принимать значения, приведенные в табл. 55.




Начало  Назад  Вперед



Книжный магазин