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


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

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

Синтаксис

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

Параметры

[in, out] ConditionVariable

Указатель на переменную условия. Эту переменную необходимо инициализировать с помощью функции InitializeConditionVariable .

[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]
Целевая платформа Windows
Header synchapi.h (включает Windows.h в Windows 7, Windows Server 2008 Windows Server 2008 R2)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

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

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

API-интерфейсы Vertdll, доступные в анклавах VBS