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 usando a função InitializeConditionVariable .

[in, out] CriticalSection

Um ponteiro para o objeto de seção crítica. 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 decorrer, a função adquirirá novamente a seção crítica e retornará 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 retornado

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

Se a função falhar ou o intervalo de tempo limite decorrer, 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 expirou antes de outro thread tentar ativar o thread em suspensão.

Comentários

Um thread que está em suspensão 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.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho synchapi.h (inclua Windows.h no Windows 7, Windows Server 2008 Windows Server 2008 R2)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

Variáveis de condição

Funções de sincronização

APIs Vertdll disponíveis em enclaves de VBS