Sdílet prostřednictvím


Thread.Sleep Metoda

Definice

Pozastaví aktuální vlákno na zadanou dobu.

Přetížení

Sleep(Int32)

Pozastaví aktuální vlákno na zadaný počet milisekund.

Sleep(TimeSpan)

Pozastaví aktuální vlákno na zadanou dobu.

Sleep(Int32)

Zdroj:
Thread.cs
Zdroj:
Thread.cs
Zdroj:
Thread.cs

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

Počet milisekund, pro které je vlákno pozastaveno. Pokud je hodnota argumentu millisecondsTimeout nula, vlákno přenechá zbytek svého časového řezu na libovolné vlákno se stejnou prioritou, které je připravené ke spuštění. Pokud nejsou připravená ke spuštění žádná další vlákna se stejnou prioritou, spuštění aktuálního vlákna se nepozastaví.

Výjimky

Hodnota časového limitu je záporná a nerovná se hodnotě Infinite.

Příklady

Následující příklad používá metodu Sleep k blokování hlavního vlákna aplikace.

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.

Poznámky

Vlákno nebude naplánováno na spuštění operačním systémem po zadanou dobu. Tato metoda změní stav vlákna tak, aby zahrnoval WaitSleepJoin.

Můžete zadat Timeout.Infinite , aby millisecondsTimeout parametr pozastavil vlákno na neomezenou dobu. K synchronizaci vláken nebo správě prostředků ale doporučujeme použít jiné System.Threading třídy, MonitorEventWaitHandlejako Mutexje , , nebo Semaphore .

Systémové hodiny tikají určitou rychlostí, které se říká rozlišení hodin. Skutečný časový limit nemusí být přesně zadaný časový limit, protože zadaný časový limit se upraví tak, aby odpovídal časovým limitům. Další informace o rozlišení hodin a čekací době najdete v tématu Funkce Spánku z rozhraní API systému Windows.

Tato metoda neprovádí standardní pumpování COM a SendMessage.

Poznámka

Pokud potřebujete spát na vlákně, které má STAThreadAttribute, ale chcete provést standardní com a SendMessage pumpování, zvažte použití jednoho z přetížení Join metody, která určuje interval časového limitu.

Platí pro

Sleep(TimeSpan)

Zdroj:
Thread.cs
Zdroj:
Thread.cs
Zdroj:
Thread.cs

Pozastaví aktuální vlákno na zadanou dobu.

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

Doba, po kterou je vlákno pozastaveno. Pokud je Zerohodnota argumentu timeout , vlákno přenechá zbytek svého časového řezu libovolnému vláknu se stejnou prioritou, které je připravené ke spuštění. Pokud nejsou připravená ke spuštění žádná další vlákna se stejnou prioritou, spuštění aktuálního vlákna se nepozastaví.

Výjimky

Hodnota timeout je záporná a nerovná se Infinite v milisekundách nebo je větší než Int32.MaxValue milisekund.

Příklady

Následující příklad používá Sleep(TimeSpan) přetížení metody k zablokování hlavního vlákna aplikace pětkrát, vždy po dobu dvou sekund.

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.

Poznámky

Vlákno nebude naplánováno na spuštění operačním systémem po zadanou dobu. Tato metoda změní stav vlákna tak, aby zahrnoval WaitSleepJoin.

Můžete zadat Timeout.InfiniteTimeSpan , aby timeout parametr pozastavil vlákno na neomezenou dobu. K synchronizaci vláken nebo správě prostředků ale doporučujeme použít jiné System.Threading třídy, MonitorEventWaitHandlejako Mutexje , , nebo Semaphore .

Toto přetížení Sleep využívá celkový počet celých milisekund v nástroji timeout. Desetinné milisekundy se zahodí.

Tato metoda neprovádí standardní pumpování COM a SendMessage.

Poznámka

Pokud potřebujete spát na vlákně, které má STAThreadAttribute, ale chcete provést standardní com a SendMessage pumpování, zvažte použití jednoho z přetížení Join metody, která určuje interval časového limitu.

Platí pro