Thread.Sleep Metoda

Definicja

Wstrzymuje bieżący wątek przez określony czas.Suspends the current thread for the specified amount of time.

Przeciążenia

Sleep(Int32)

Wstrzymuje bieżący wątek przez określoną liczbę milisekund.Suspends the current thread for the specified number of milliseconds.

Sleep(TimeSpan)

Wstrzymuje bieżący wątek przez określony czas.Suspends the current thread for the specified amount of time.

Sleep(Int32)

Wstrzymuje bieżący wątek przez określoną liczbę milisekund.Suspends the current thread for the specified number of milliseconds.

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, przez jaką wątek jest zawieszony.The number of milliseconds for which the thread is suspended. Jeśli wartość argumentu millisecondsTimeout jest równa zero, wątek zwalnia resztę jego wycinka czasu do dowolnego wątku o równym priorytecie, który jest gotowy do uruchomienia.If the value of the millisecondsTimeout argument is zero, the thread relinquishes the remainder of its time slice to any thread of equal priority that is ready to run. Jeśli nie ma innych wątków o równym priorytecie, które są gotowe do uruchomienia, wykonanie bieżącego wątku nie jest wstrzymane.If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

Wyjątki

Wartość limitu czasu jest ujemna i nie jest równa Infinite.The time-out value is negative and is not equal to Infinite.

Przykłady

W poniższym przykładzie zastosowano metodę Sleep, aby zablokować główny wątek aplikacji.The following example uses the Sleep method to block the application's main thread.

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.
 */
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.The thread will not be scheduled for execution by the operating system for the amount of time specified. Ta metoda zmienia stan wątku w celu uwzględnienia WaitSleepJoin.This method changes the state of the thread to include WaitSleepJoin.

Można określić Timeout.Infinite parametru millisecondsTimeout, aby wstrzymać wątek w nieskończoność.You can specify Timeout.Infinite for the millisecondsTimeout parameter to suspend the thread indefinitely. Zaleca się jednak używanie innych klas System.Threading, takich jak Mutex, Monitor, EventWaitHandlelub Semaphore, zamiast synchronizować wątki lub zarządzać zasobami.However, we recommend that you use other System.Threading classes such as Mutex, Monitor, EventWaitHandle, or Semaphore instead to synchronize threads or manage resources.

Zegar systemowy taktuje określoną stawkę nazywaną rozdzielczością zegara.The system clock ticks at a specific rate called the clock resolution. Rzeczywisty limit czasu może nie być dokładnie określony w określonym limicie czasu, ponieważ określony limit czasu zostanie dostosowany tak, aby był zbieżny z taktami zegara.The actual timeout might not be exactly the specified timeout, because the specified timeout will be adjusted to coincide with clock ticks. Aby uzyskać więcej informacji o rozdzielczości zegara i czasie oczekiwania, zobacz Funkcja uśpienia z interfejsów API systemu Windows.For more information on clock resolution and the waiting time, see the Sleep function from the Windows system APIs.

Ta metoda nie wykonuje standardowej pompowania modelu COM i SendMessage.This method does not perform standard COM and SendMessage pumping.

Uwaga

Jeśli zachodzi potrzeba uśpienia w wątku, który ma STAThreadAttribute, ale chcesz wykonać standardowe pompowanie modelu COM i SendMessage, rozważ użycie jednego z przeciążeń metody Join, która określa interwał limitu czasu.If you need to sleep on a thread that has STAThreadAttribute, but you want to perform standard COM and SendMessage pumping, consider using one of the overloads of the Join method that specifies a timeout interval.

Sleep(TimeSpan)

Wstrzymuje bieżący wątek przez określony czas.Suspends the current thread for the specified amount of time.

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 wstrzymania wątku.The amount of time for which the thread is suspended. Jeśli wartość argumentu millisecondsTimeout jest Zero, wątek zwalnia resztę jego wycinka czasu do dowolnego wątku o równym priorytecie, który jest gotowy do uruchomienia.If the value of the millisecondsTimeout argument is Zero, the thread relinquishes the remainder of its time slice to any thread of equal priority that is ready to run. Jeśli nie ma innych wątków o równym priorytecie, które są gotowe do uruchomienia, wykonanie bieżącego wątku nie jest wstrzymane.If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

Wyjątki

Wartość timeout jest ujemna i nie jest równa Infinite w milisekundach lub przekracza MaxValue milisekund.The value of timeout is negative and is not equal to Infinite in milliseconds, or is greater than MaxValue milliseconds.

Przykłady

Poniższy przykład używa przeciążenia metody Sleep(TimeSpan), aby zablokować główny wątek aplikacji pięć razy, przez dwa sekundy za każdym razem.The following example uses the Sleep(TimeSpan) method overload to block the application's main thread five times, for two seconds each time.

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.
 */
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.The thread will not be scheduled for execution by the operating system for the amount of time specified. Ta metoda zmienia stan wątku w celu uwzględnienia WaitSleepJoin.This method changes the state of the thread to include WaitSleepJoin.

Można określić Timeout.InfiniteTimeSpan parametru timeout, aby wstrzymać wątek w nieskończoność.You can specify Timeout.InfiniteTimeSpan for the timeout parameter to suspend the thread indefinitely. Zaleca się jednak używanie innych klas System.Threading, takich jak Mutex, Monitor, EventWaitHandlelub Semaphore, zamiast synchronizować wątki lub zarządzać zasobami.However, we recommend that you use other System.Threading classes such as Mutex, Monitor, EventWaitHandle, or Semaphore instead to synchronize threads or manage resources.

To Przeciążenie Sleep używa łącznej liczby całych milisekund w timeout.This overload of Sleep uses the total number of whole milliseconds in timeout. Ułamki milisekundy są odrzucane.Fractional milliseconds are discarded.

Ta metoda nie wykonuje standardowej pompowania modelu COM i SendMessage.This method does not perform standard COM and SendMessage pumping.

Uwaga

Jeśli zachodzi potrzeba uśpienia w wątku, który ma STAThreadAttribute, ale chcesz wykonać standardowe pompowanie modelu COM i SendMessage, rozważ użycie jednego z przeciążeń metody Join, która określa interwał limitu czasu.If you need to sleep on a thread that has STAThreadAttribute, but you want to perform standard COM and SendMessage pumping, consider using one of the overloads of the Join method that specifies a timeout interval.

Dotyczy