Поделиться через


Функция SleepConditionVariableSRW (synchapi.h)

Спящий режим в указанной переменной условия и освобождает указанную блокировку как атомарную операцию.

Синтаксис

BOOL SleepConditionVariableSRW(
  [in, out] PCONDITION_VARIABLE ConditionVariable,
  [in, out] PSRWLOCK            SRWLock,
  [in]      DWORD               dwMilliseconds,
  [in]      ULONG               Flags
);

Параметры

[in, out] ConditionVariable

Указатель на переменную условия. Эта переменная должна быть инициализирована путем вызова InitializeConditionVariable (для динамической инициализации структуры) или назначения константы CONDITION_VARIABLE_INIT переменной структуры (для инициализации структуры статически).

[in, out] SRWLock

Указатель на блокировку. Эта блокировка должна храниться таким образом, как указано параметром Flags .

[in] dwMilliseconds

Интервал времени ожидания в миллисекундах. Функция возвращается, если интервал истекает. Если dwMilliseconds равно нулю, функция проверяет состояния указанных объектов и возвращает немедленно. Если dwMilliseconds имеет значение INFINITE, интервал времени ожидания функции никогда не истекает.

[in] Flags

Если этот параметр CONDITION_VARIABLE_LOCKMODE_SHARED, блокировка SRW находится в общем режиме. В противном случае блокировка находится в монопольном режиме.

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

Если функция выполнена успешно, возвращаемое значение ненулевое.

Если функция завершается ошибкой, возвращается 0значение. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.

Если время ожидания истекает, функция возвращается FALSE , а GetLastError возвращает ERROR_TIMEOUT.

Замечания

Если блокировка разблокирована при вызове этой функции, поведение функции не определено.

Поток можно проснуть с помощью функции WakeConditionVariable или WakeAllConditionVariable . После того как поток проснулся, он повторно получает блокировку, выпущенную при входе потока в спящее состояние.

Переменные условий подвержены спровождительным пробуждениям (не связанным с явным пробуждением) и украденным пробуждением (другой поток управляет выполнением до проснувшегося потока). Поэтому после возврата операции сна необходимо повторно проверить предикат (обычно в while цикле).

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Vista [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008 [классические приложения | Приложения UWP]
целевая платформа Виндоус
Header synchapi.h (включая Windows.h в Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

См. также

Блокировки с тонким средством чтения и записи (SRW)

Функции синхронизации

API Vertdll, доступные в анклавах VBS