Thread.Sleep Método

Definição

Suspende o thread atual para o período de tempo especificado.

Sobrecargas

Sleep(Int32)

Suspende o thread atual no número especificado de milissegundos.

Sleep(TimeSpan)

Suspende o thread atual para o período de tempo especificado.

Sleep(Int32)

Origem:
Thread.cs
Origem:
Thread.cs
Origem:
Thread.cs

Suspende o thread atual no número especificado de milissegundos.

public:
 static void Sleep(int millisecondsTimeout);
public static void Sleep (int millisecondsTimeout);
static member Sleep : int -> unit
Public Shared Sub Sleep (millisecondsTimeout As Integer)

Parâmetros

millisecondsTimeout
Int32

O número de milissegundos durante o qual o thread ficará suspenso. Se o valor do argumento millisecondsTimeout for zero, o thread entregará o restante da fração de tempo para qualquer thread de prioridade igual que está pronto para execução. Se não houver nenhum outro thread de prioridade igual pronto para execução, a execução do thread atual não será suspensa.

Exceções

O valor de tempo limite é negativo e não é igual a Infinite.

Exemplos

O exemplo a seguir usa o Sleep método para bloquear o thread de main do aplicativo.

using namespace System;
using namespace System::Threading;

int main()
{
    for (int i = 0; i < 5; i++)
    {
        Console::WriteLine("Sleep for 2 seconds.");
        Thread::Sleep(2000);
    }

    Console::WriteLine("Main thread exits.");
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */
using System;
using System.Threading;

class Example
{
    static void Main()
    {
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Sleep for 2 seconds.");
            Thread.Sleep(2000);
        }

        Console.WriteLine("Main thread exits.");
    }
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */
open System.Threading

for _ = 0 to 4 do
    printfn "Sleep for 2 seconds."
    Thread.Sleep 2000

printfn "Main thread exits."

// This example produces the following output:
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Main thread exits.
Imports System.Threading

Class Example

    Shared Sub Main()

        For i As Integer = 0 To 4
            Console.WriteLine("Sleep for 2 seconds.")
            Thread.Sleep(2000)
        Next

        Console.WriteLine("Main thread exits.")
    End Sub
End Class

' This example produces the following output:
'
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Main thread exits.

Comentários

O thread não será agendado para execução pelo sistema operacional pela quantidade de tempo especificada. Esse método altera o estado do thread para incluir WaitSleepJoin.

Você pode especificar Timeout.Infinite para o millisecondsTimeout parâmetro suspender o thread indefinidamente. No entanto, recomendamos que você use outras System.Threading classes, como Mutex, MonitorEventWaitHandle, ouSemaphore, em vez disso, para sincronizar threads ou gerenciar recursos.

O relógio do sistema funciona a uma taxa específica chamada resolução do relógio. O tempo limite real pode não ser exatamente o tempo limite especificado, pois o tempo limite especificado será ajustado para coincidir com tiques de relógio. Para obter mais informações sobre a resolução do relógio e o tempo de espera, consulte a função Suspensão das APIs do sistema Windows.

Esse método não executa o bombeamento PADRÃO e SendMessage.

Observação

Se você precisar dormir em um thread que tenha STAThreadAttribute, mas quiser executar o bombeamento padrão de COM e SendMessage, considere usar uma das sobrecargas do Join método que especifica um intervalo de tempo limite.

Aplica-se a

Sleep(TimeSpan)

Origem:
Thread.cs
Origem:
Thread.cs
Origem:
Thread.cs

Suspende o thread atual para o período de tempo especificado.

public:
 static void Sleep(TimeSpan timeout);
public static void Sleep (TimeSpan timeout);
static member Sleep : TimeSpan -> unit
Public Shared Sub Sleep (timeout As TimeSpan)

Parâmetros

timeout
TimeSpan

A quantidade de tempo para a qual o thread é suspenso. Se o valor do argumento timeout for Zero, o thread entregará o restante de sua fração de tempo a qualquer thread de prioridade igual que esteja pronto para execução. Se não houver nenhum outro thread de prioridade igual pronto para execução, a execução do thread atual não será suspensa.

Exceções

O valor de timeout é negativo e não é igual a Infinite em milissegundos ou é maior que Int32.MaxValue milissegundos.

Exemplos

O exemplo a seguir usa a sobrecarga do Sleep(TimeSpan) método para bloquear o thread de main do aplicativo cinco vezes, por dois segundos cada vez.

using namespace System;
using namespace System::Threading;

int main()
{
    TimeSpan interval = TimeSpan(0, 0, 2);

    for (int i = 0; i < 5; i++)
    {
        Console::WriteLine("Sleep for 2 seconds.");
        Thread::Sleep(interval);
    }

    Console::WriteLine("Main thread exits.");
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */
using System;
using System.Threading;

class Example
{
    static void Main()
    {
        TimeSpan interval = new TimeSpan(0, 0, 2);

        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine("Sleep for 2 seconds.");
            Thread.Sleep(interval);
        }

        Console.WriteLine("Main thread exits.");
    }
}

/* This example produces the following output:

Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Sleep for 2 seconds.
Main thread exits.
 */
open System
open System.Threading

let interval = TimeSpan(0, 0, 2)

for _ = 0 to 4 do
    printfn "Sleep for 2 seconds."
    Thread.Sleep interval

printfn "Main thread exits."

// This example produces the following output:
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Sleep for 2 seconds.
//     Main thread exits.
Imports System.Threading

Class Example

    Shared Sub Main()

        Dim interval As New TimeSpan(0, 0, 2)

        For i As Integer = 0 To 4
            Console.WriteLine("Sleep for 2 seconds.")
            Thread.Sleep(interval)
        Next

        Console.WriteLine("Main thread exits.")
    End Sub
End Class

' This example produces the following output:
'
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Sleep for 2 seconds.
'Main thread exits.

Comentários

O thread não será agendado para execução pelo sistema operacional pela quantidade de tempo especificada. Esse método altera o estado do thread para incluir WaitSleepJoin.

Você pode especificar Timeout.InfiniteTimeSpan para o timeout parâmetro suspender o thread indefinidamente. No entanto, recomendamos que você use outras System.Threading classes, como Mutex, MonitorEventWaitHandle, ouSemaphore, em vez disso, para sincronizar threads ou gerenciar recursos.

Essa sobrecarga de Sleep usa o número total de milissegundos inteiros em timeout. Milissegundos fracionários são descartados.

Esse método não executa o bombeamento PADRÃO e SendMessage.

Observação

Se você precisar dormir em um thread que tenha STAThreadAttribute, mas quiser executar o bombeamento padrão de COM e SendMessage, considere usar uma das sobrecargas do Join método que especifica um intervalo de tempo limite.

Aplica-se a