Thread.Sleep Metoda

Definicja

Zawiesza bieżący wątek przez określony czas.

Przeciążenia

Sleep(Int32)

Zawiesza bieżący wątek dla określonej liczby milisekund.

Sleep(TimeSpan)

Zawiesza bieżący wątek przez określony czas.

Sleep(Int32)

Zawiesza bieżący wątek dla określonej liczby milisekund.

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

Parametry

millisecondsTimeout
Int32

Liczba milisekund, dla których wątek jest zawieszony. Jeśli wartość argumentu millisecondsTimeout ma wartość zero, wątek rezygnuje z pozostałej części czasu do dowolnego wątku o równym priorytetzie, który jest gotowy do uruchomienia. Jeśli nie ma innych wątków o równym prioryfikcie, które są gotowe do uruchomienia, wykonanie bieżącego wątku nie jest zawieszone.

Wyjątki

Wartość limitu czasu jest ujemna i nie jest równa Infinite.

Przykłady

W poniższym przykładzie Sleep użyto metody , aby zablokować główny wątek aplikacji.

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.

Uwagi

Wątek nie zostanie zaplanowany do wykonania przez system operacyjny przez określony czas. Ta metoda zmienia stan wątku tak, aby zawierał WaitSleepJoinelement .

Można określić Timeout.Infinite , aby millisecondsTimeout parametr zawiesił wątek na czas nieokreślony. Zalecamy jednak używanie innych System.Threading klas, takich jak Mutex, Monitor, EventWaitHandlelub zamiast tego do synchronizowania wątków lub Semaphore zarządzania zasobami.

Zegar systemowy tyka z określoną szybkością o nazwie rozdzielczość zegara. Rzeczywisty limit czasu może nie być dokładnie określonym limitem czasu, ponieważ określony limit czasu zostanie dostosowany w celu zbiegu się z znacznikami zegara. Aby uzyskać więcej informacji na temat rozdzielczości zegara i czasu oczekiwania, zobacz funkcja Uśpienie z interfejsów API systemu Windows.

Ta metoda nie wykonuje standardowej pompowania COM i SendMessage.

Uwaga

Jeśli musisz spać w wątku z elementem , STAThreadAttributeale chcesz wykonać standardowe pompowanie COM i SendMessage, rozważ użycie jednego z przeciążeń Join metody, która określa interwał limitu czasu.

Dotyczy

Sleep(TimeSpan)

Zawiesza bieżący wątek przez określony czas.

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

Parametry

timeout
TimeSpan

Czas, przez który wątek jest zawieszony. Jeśli wartość argumentu timeout to Zero, wątek ponownie odsunie pozostałą część czasu do dowolnego wątku o równym priorytetzie, który jest gotowy do uruchomienia. Jeśli nie ma innych wątków o równym prioryfikcie, które są gotowe do uruchomienia, wykonanie bieżącego wątku nie jest zawieszone.

Wyjątki

Wartość jest timeout ujemna i nie jest równa Infinite w milisekundach lub jest większa niż Int32.MaxValue milisekund.

Przykłady

W poniższym przykładzie użyto Sleep(TimeSpan) przeciążenia metody, aby zablokować główny wątek aplikacji pięć razy, za każdym razem dwa sekundy.

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.

Uwagi

Wątek nie zostanie zaplanowany do wykonania przez system operacyjny przez określony czas. Ta metoda zmienia stan wątku tak, aby zawierał WaitSleepJoinelement .

Można określić Timeout.InfiniteTimeSpan , aby timeout parametr zawiesił wątek na czas nieokreślony. Zalecamy jednak używanie innych System.Threading klas, takich jak Mutex, Monitor, EventWaitHandlelub zamiast tego do synchronizowania wątków lub Semaphore zarządzania zasobami.

To przeciążenie Sleep używa całkowitej liczby milisekund w .timeout Milisekundy ułamkowe są odrzucane.

Ta metoda nie wykonuje standardowej pompowania COM i SendMessage.

Uwaga

Jeśli musisz spać w wątku z elementem , STAThreadAttributeale chcesz wykonać standardowe pompowanie COM i SendMessage, rozważ użycie jednego z przeciążeń Join metody, która określa interwał limitu czasu.

Dotyczy