- •Способы доступа к общим ресурсам
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
- •Примечания
- •Параметры
- •Возвращаемые значения
Возвращаемые значения
Если функция выполнилась успешно, возвращаемое значение показывает причину завершения функции. Это могут быть следующие значения:
Значение |
Смысл |
WAIT_ABANDONED |
Заданный объект – мутекс, не освобожденный последним владельцем перед его завершением. Владение мутексом переходит вызвавшему потоку, и мутекс устанавливается в состояние «nonsignaled». |
WAIT_OBJECT_0 |
Состояние заданного объекта «signaled». |
WAIT_TIMEOUT |
Истек таймаут ожидания, а состояние объекта все еще «nonsignaled». |
Если функция выполнилась успешно, возвращается WAIT_FAILED. Для получения более подробной информации об ошибке используйте GetLastError.
Примечания
Функция WaitForSingleObject проверяет текущее состояние заданного объекта. Если состояние объекта «nonsignaled», вызывающий поток входит в состояние ожидания. Поток потребляет очень мало процессорного времени, пока ждет изменения состояния объекта на «signaled» или окончания таймаута.
Перед завершением функция ожидания модифицирует состояние некоторых типов объектов синхронизации. Изменение происходит только для объектов, чье состояние «signaled» стало причиной завершения функции. Например, счетчик семафора уменьшается на единицу.
ReleaseMutex
Функция ReleaseMutex освобождает заданный мутекс.
BOOL ReleaseMutex(
HANDLE hMutex // хендл мутекса
);
Параметры
hMutex
Хендл мутекса.
Возвращаемые значения
Если функция выполнилась успешно, возвращается ненулевое значение.
Если функция выполнилась успешно, возвращается 0. Для получения более подробной информации об ошибке используйте GetLastError.
Примечания
Функция ReleaseMutex завершается с ошибкой, если вызывающий поток не является владельцем мутекса.
CreateSemaphore
Функция CreateSemaphore создает или открывает именованный или неименованный семафор.
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
// указатель на атрибуты безопасности
LONG lInitialCount, // начальное значение счетчика
LONG lMaximumCount, // максимальное значение счетчика
LPCTSTR lpName // указатель на имя семафора
);
Параметры
lpSemaphoreAttributes
Указатель на структуру SECURITY_ATTRIBUTES, определяющую, может ли полученный хендл наследоваться порожденными процессами. Если lpSemaphoreAttributes равен NULL, хендл не может быть унаследован.
Windows NT/2000: Элемент lpSecurityDescriptor данной структуры задает дескриптор безопасности для нового семафора. Если lpSemaphoreAttributes равен NULL, семафор получает дескриптор безопасности по умолчанию.
Count
Задает начальное значение счетчика семафора. Это значение должно быть больше или равно нулю и меньше или равно lMaximumCount. Состояние семафора «signaled», когда его счетчик больше нуля, и «nonsignaled», когда он равен нулю. Счетчик уменьшается на единицу, когда функция ожидания освобождает поток, ожидавший семафора. Счетчик увеличивается на заданное значение при вызове функции ReleaseSemaphore.
lMaximumCount
Задает максимальное значение счетчика семафора. Должно быть больше нуля.
lpName
Указатель на null-terminated-строку, задающую имя семафора. Длина имени ограничена MAX_PATH символами. При сравнении имен учитывается регистр букв.
Если lpName соответствует имени существующего семафора, эта функция запрашивает доступ SEMAPHORE_ALL_ACCESS к существующему объекту. В этом случае, параметрыlInitialCount и lMaximumCount игнорируются, поскольку они уже установлены создавшим мутекс процессом. Если параметр lpSemaphoreAttributes не равен NULL, он определяет, может ли хендл наследоваться, но элемент структуры, определяющий дескриптор безопасности, игнорируется.
Если lpName равен NULL, семафор создается без имени.
Если lpName соответствует имени существующего события, мутекса и т.д., функция завершается с ошибкой и GetLastError возвращает ERROR_INVALID_HANDLE. Это происходит из-за того, что эти объекты разделяют общее пространство имен.
Windows NT 4.0 и более ранние версии, Windows 95/98: Имя может содержать любые символы, кроме обратного слеша (‘\’).
