Функция 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 |