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 |