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


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

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

Синтаксис

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

Параметры

[in, out] ConditionVariable

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

[in, out] CriticalSection

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

[in] dwMilliseconds

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

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

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

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

См. также

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

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

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