Thread.Sleep Metoda

Definice

Pozastaví aktuální vlákno na určenou dobu.Suspends the current thread for the specified amount of time.

Přetížení

Sleep(Int32)

Pozastaví aktuální vlákno na zadaný počet milisekund.Suspends the current thread for the specified number of milliseconds.

Sleep(TimeSpan)

Pozastaví aktuální vlákno na určenou dobu.Suspends the current thread for the specified amount of time.

Sleep(Int32)

Pozastaví aktuální vlákno na zadaný počet 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

Počet milisekund, po které je vlákno pozastaveno.The number of milliseconds for which the thread is suspended. Pokud je hodnota argumentu millisecondsTimeout nula, vlákno odchází zbytek časového řezu do libovolného vlákna stejné priority, které je připraveno ke spuštění.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. Pokud neexistují žádná další vlákna se stejnou prioritou, která jsou připravená ke spuštění, spuštění aktuálního vlákna není pozastaveno.If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

Výjimky

Hodnota časového limitu je záporná a nerovná se Infinite.The time-out value is negative and is not equal to Infinite.

Příklady

Následující příklad používá metodu Sleep k blokování hlavního vlákna aplikace.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.

Poznámky

Vlákno nebude naplánováno pro spuštění operačním systémem po určenou dobu.The thread will not be scheduled for execution by the operating system for the amount of time specified. Tato metoda změní stav vlákna tak, aby zahrnoval WaitSleepJoin.This method changes the state of the thread to include WaitSleepJoin.

Můžete zadat Timeout.Infinite pro parametr millisecondsTimeout pro pozastavení vlákna na neomezenou dobu.You can specify Timeout.Infinite for the millisecondsTimeout parameter to suspend the thread indefinitely. Doporučujeme však použít jiné třídy System.Threading, například Mutex, Monitor, EventWaitHandlenebo Semaphore k synchronizaci vláken nebo správě prostředků.However, we recommend that you use other System.Threading classes such as Mutex, Monitor, EventWaitHandle, or Semaphore instead to synchronize threads or manage resources.

Systémové hodiny se zaznamená podle konkrétní sazby, která se označuje jako rozlišení hodin.The system clock ticks at a specific rate called the clock resolution. Skutečný časový limit nemusí být přesně stanovený časový limit, protože zadaný časový limit se upraví tak, aby odpovídal taktům.The actual timeout might not be exactly the specified timeout, because the specified timeout will be adjusted to coincide with clock ticks. Další informace o rozlišení hodin a čekací době najdete v tématu funkce režimu spánku z rozhraní API systému Windows.For more information on clock resolution and the waiting time, see the Sleep function from the Windows system APIs.

Tato metoda neprovádí standardní čerpací stanice COM a SendMessage.This method does not perform standard COM and SendMessage pumping.

Poznámka

Pokud potřebujete přejít do režimu spánku ve vlákně, které má STAThreadAttribute, ale chcete provést standardní čerpadlo s modelem COM a SendMessage, zvažte použití jednoho z přetížení metody Join, která určuje interval časového limitu.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)

Pozastaví aktuální vlákno na určenou dobu.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

Množství času, po který je vlákno pozastaveno.The amount of time for which the thread is suspended. Pokud je hodnota argumentu millisecondsTimeout Zero, vlákno odchází zbytek časového řezu do libovolného vlákna stejné priority, které je připraveno ke spuštění.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. Pokud neexistují žádná další vlákna se stejnou prioritou, která jsou připravená ke spuštění, spuštění aktuálního vlákna není pozastaveno.If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

Výjimky

Hodnota timeout je záporná a není rovna Infinite v milisekundách nebo je větší než MaxValue milisekund.The value of timeout is negative and is not equal to Infinite in milliseconds, or is greater than MaxValue milliseconds.

Příklady

Následující příklad používá přetížení metody Sleep(TimeSpan) k zablokování hlavního vlákna aplikace pětkrát po dobu dvou sekund.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.

Poznámky

Vlákno nebude naplánováno pro spuštění operačním systémem po určenou dobu.The thread will not be scheduled for execution by the operating system for the amount of time specified. Tato metoda změní stav vlákna tak, aby zahrnoval WaitSleepJoin.This method changes the state of the thread to include WaitSleepJoin.

Můžete zadat Timeout.InfiniteTimeSpan pro parametr timeout pro pozastavení vlákna na neomezenou dobu.You can specify Timeout.InfiniteTimeSpan for the timeout parameter to suspend the thread indefinitely. Doporučujeme však použít jiné třídy System.Threading, například Mutex, Monitor, EventWaitHandlenebo Semaphore k synchronizaci vláken nebo správě prostředků.However, we recommend that you use other System.Threading classes such as Mutex, Monitor, EventWaitHandle, or Semaphore instead to synchronize threads or manage resources.

Toto přetížení Sleep používá celkový počet celých milisekund v timeout.This overload of Sleep uses the total number of whole milliseconds in timeout. Zlomky milisekund se zahodí.Fractional milliseconds are discarded.

Tato metoda neprovádí standardní čerpací stanice COM a SendMessage.This method does not perform standard COM and SendMessage pumping.

Poznámka

Pokud potřebujete přejít do režimu spánku ve vlákně, které má STAThreadAttribute, ale chcete provést standardní čerpadlo s modelem COM a SendMessage, zvažte použití jednoho z přetížení metody Join, která určuje interval časového limitu.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.

Platí pro