Compartilhar via


Função Sleep (synchapi.h)

Suspende a execução do thread atual até que o intervalo de tempo limite se desfaque.

Para inserir um estado de espera alertável, use a função SleepEx .

Sintaxe

void Sleep(
  [in] DWORD dwMilliseconds
);

Parâmetros

[in] dwMilliseconds

O intervalo de tempo para o qual a execução deve ser suspensa, em milissegundos.

Um valor zero faz com que o thread abra mão do restante de sua fatia de tempo para qualquer outro thread que esteja pronto para ser executado. Se não houver outros threads prontos para execução, a função retornará imediatamente e o thread continuará sendo executado. Windows XP: Um valor zero faz com que o thread abra mão do restante de sua fatia de tempo para qualquer outro thread de prioridade igual que esteja pronto para ser executado. Se não houver outros threads de prioridade igual prontos para execução, a função retornará imediatamente e o thread continuará a execução. Esse comportamento mudou a partir do Windows Server 2003.

Um valor infinite indica que a suspensão não deve atingir o tempo limite.

Retornar valor

Nenhum

Comentários

Essa função faz com que um thread abra mão do restante de sua fatia de tempo e se torne indisplicável para um intervalo com base no valor de dwMilliseconds. O relógio do sistema "marca" a uma taxa constante. Se dwMilliseconds for menor que a resolução do relógio do sistema, o thread poderá dormir por menos do que o período de tempo especificado. Se dwMilliseconds for maior que um tique, mas menor que dois, a espera poderá estar entre um e dois tiques, e assim por diante. Para aumentar a precisão do intervalo de suspensão, chame a função timeGetDevCaps para determinar a resolução mínima de temporizador com suporte e a função timeBeginPeriod para definir a resolução do temporizador como o mínimo. Tenha cuidado ao chamar timeBeginPeriod, pois chamadas frequentes podem afetar significativamente o relógio do sistema, o uso de energia do sistema e o agendador. Se você chamar timeBeginPeriod, chame-o uma vez no início do aplicativo e chame a função timeEndPeriod no final do aplicativo.

Depois que o intervalo de suspensão for passado, o thread estará pronto para ser executado. Se você especificar 0 milissegundos, o thread abrirá mão do restante de sua fatia de tempo, mas permanecerá pronto. Observe que não há garantia de que um thread pronto seja executado imediatamente. Consequentemente, o thread pode não ser executado até algum tempo após o intervalo de suspensão decorrido. Para obter mais informações, consulte Prioridades de agendamento.

Tenha cuidado ao usar o Sleep nos seguintes cenários:

  • Código que cria janelas direta ou indiretamente (por exemplo, DDE e COInitialize COM). Se um thread criar janelas, ele deverá processar mensagens. As transmissões de mensagens são enviadas para todas as janelas do sistema. Se você tiver um thread que usa Sleep com atraso infinito, o sistema fará deadlock.
  • Threads que estão sob controle de simultaneidade. Por exemplo, uma porta de conclusão de E/S ou um pool de threads limita o número de threads associados que podem ser executados. Se o número máximo de threads já estiver em execução, nenhum thread associado adicional poderá ser executado até que um thread em execução seja concluído. Se um thread usar Sleep com um intervalo de zero para aguardar que um dos threads associados adicionais realize algum trabalho, o processo poderá ficar em deadlock.
Para esses cenários, use MsgWaitForMultipleObjects ou MsgWaitForMultipleObjectsEx, em vez de Sleep.

Windows Phone 8.1: essa função tem suporte para aplicativos da Windows Phone Store no Windows Phone 8.1 e posterior.

Windows 8.1 e Windows Server 2012 R2: essa função tem suporte para aplicativos da Windows Store em Windows 8.1, Windows Server 2012 R2 e posteriores.

Exemplos

Para obter um exemplo, consulte Usando o Armazenamento Local de Thread.

Requisitos

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

Confira também

Msgwaitformultipleobjects

MsgWaitForMultipleObjectsEx

Funções de thread e processo

SleepEx

Suspendendo a execução do thread

Threads

WaitOnAddress