Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 |