Thread.Sleep Método

Definição

Suspende o thread atual durante o tempo especificado.

Sobrecargas

Name Description
Sleep(Int32)

Suspende o fio atual durante o número especificado de milissegundos.

Sleep(TimeSpan)

Suspende o thread atual durante o tempo especificado.

Sleep(Int32)

Suspende o fio atual durante o 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 os quais o fio está suspenso. Se o valor do millisecondsTimeout argumento for zero, a thread cede o restante da sua fatia temporal a qualquer thread de igual prioridade que esteja pronto a executar. Se não houver outros threads de igual prioridade prontos a ser executados, a execução do thread atual não é suspensa.

Exceções

O valor de time-out é negativo e não é igual a Infinite.

Exemplos

O exemplo seguinte utiliza o Sleep método para bloquear o fio principal da aplicação.

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.

Observações

A thread não será agendada para execução pelo sistema operativo durante o tempo especificado. Este método altera o estado do thread para incluir WaitSleepJoin.

Pode especificar Timeout.Infinite para o millisecondsTimeout parâmetro suspender o thread indefinidamente. No entanto, recomendamos que utilize outras System.Threading classes como Mutex, Monitor, EventWaitHandle, ou Semaphore em vez disso para sincronizar threads ou gerir recursos.

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

Este método não realiza o pumping padrão COM e SendMessage.

Note

Se precisares de dormir num thread que tenha STAThreadAttribute, mas quiseres fazer o COM padrão e o MendMessage pumping, considera usar uma das sobrecargas do Join método que especifica um intervalo de timeout.

Aplica-se a

Sleep(TimeSpan)

Suspende o thread atual durante o 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

O tempo durante o qual o fio está suspenso. Se o valor do timeout argumento for Zero, a thread cede o restante da sua fatia de tempo para qualquer thread de igual prioridade que esteja pronto a ser executado. Se não houver outros threads de igual prioridade prontos a ser executados, a execução do thread atual não é suspensa.

Exceções

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

Exemplos

O exemplo seguinte usa a Sleep(TimeSpan) sobrecarga do método para bloquear o thread principal da aplicação cinco vezes, durante dois segundos cada vez.

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.

Observações

A thread não será agendada para execução pelo sistema operativo durante o tempo especificado. Este método altera o estado do thread para incluir WaitSleepJoin.

Pode especificar Timeout.InfiniteTimeSpan para o timeout parâmetro suspender o thread indefinidamente. No entanto, recomendamos que utilize outras System.Threading classes como Mutex, Monitor, EventWaitHandle, ou Semaphore em vez disso para sincronizar threads ou gerir recursos.

Esta sobrecarga de Sleep utiliza o número total de milissegundos inteiros em timeout. Frações de milissegundos são descartadas.

Este método não realiza o pumping padrão COM e SendMessage.

Note

Se precisares de dormir num thread que tenha STAThreadAttribute, mas quiseres fazer o COM padrão e o MendMessage pumping, considera usar uma das sobrecargas do Join método que especifica um intervalo de timeout.

Aplica-se a