Compartilhar via


Função SleepConditionVariableCS (synchapi.h)

Dorme na variável de condição especificada e libera a seção crítica especificada como uma operação atômica.

Sintaxe

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

Parâmetros

[in, out] ConditionVariable

Um ponteiro para a variável de condição. Essa variável deve ser inicializada chamando InitializeConditionVariable (para inicializar a estrutura dinamicamente) ou atribuir a constante CONDITION_VARIABLE_INIT à variável de estrutura (para inicializar a estrutura estaticamente).

[in, out] CriticalSection

Um ponteiro para o objeto de seção crítico. Esta seção crítica deve ser inserida exatamente uma vez pelo chamador no momento em que SleepConditionVariableCS é chamado.

[in] dwMilliseconds

O intervalo de tempo limite, em milissegundos. Se o intervalo de tempo limite decorrido, a função readquire a seção crítica e retorna zero. Se dwMilliseconds for zero, a função testará os estados dos objetos especificados e retornará imediatamente. Se dwMilliseconds for INFINITE, o intervalo de tempo limite da função nunca será decorrido. Para obter mais informações, consulte Comentários.

Valor de retorno

Se a função for bem-sucedida, o valor retornado não será zero.

Se a função falhar ou o intervalo de tempo limite decorrido, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError. Os códigos de erro possíveis incluem ERROR_TIMEOUT, que indica que o intervalo de tempo limite decorrido antes de outro thread tentar ativar o thread de suspensão.

Observações

Um thread que está dormindo em uma variável de condição pode ser acordado antes que o intervalo de tempo limite especificado tenha decorrido usando a função WakeConditionVariable ou WakeAllConditionVariable . Nesse caso, o thread é ativado quando o processamento de ativação é concluído e não quando o intervalo de tempo limite é decorrido. Depois que o thread é acordado, ele adquire novamente a seção crítica liberada quando o thread entrou no estado de suspensão.

As variáveis de condição estão sujeitas a ativações espúrias (aquelas não associadas a uma ativação explícita) e ativações roubadas (outro thread consegue ser executado antes do thread acordado). Portanto, você deve verificar novamente um predicado (normalmente em um while loop) após o retorno de uma operação de suspensão.

Exemplos

Para obter um exemplo que usa essa função, consulte Usando variáveis de condição.

Requirements

Requirement Value
Cliente mínimo suportado Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo compatível Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
Header synchapi.h (inclua Windows.h no Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
de DLL Kernel32.dll

Consulte também

Variáveis de condição

Funções de sincronização

APIs Vertdll disponíveis em enclaves de VBS