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

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

Синтаксис

BOOL SleepConditionVariableCS(
  [in, out] PCONDITION_VARIABLE ConditionVariable,
  [in, out] PCRITICAL_SECTION   CriticalSection,
  [in]      DWORD               dwMilliseconds
);

Параметры

[in, out] ConditionVariable

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

[in, out] CriticalSection

Указатель на объект критического раздела. Этот критический раздел должен быть введен вызывающим абонентом ровно один раз во время вызова SleepConditionVariableCS .

[in] dwMilliseconds

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

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

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

Если функция завершается сбоем или истекает интервал времени ожидания, возвращаемое значение равно нулю. Дополнительные сведения об ошибке можно получить, вызвав 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

См. также

Переменные условия

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

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