Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Спящий режим в указанной переменной условия и освобождает указанную блокировку как атомарную операцию.
Синтаксис
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 |