Поделиться через


Thread.Sleep Метод

Определение

Приостанавливает текущий поток на заданное время.

Перегрузки

Sleep(Int32)

Приостанавливает текущий поток на заданное количество миллисекунд.

Sleep(TimeSpan)

Приостанавливает текущий поток на заданное время.

Sleep(Int32)

Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs

Приостанавливает текущий поток на заданное количество миллисекунд.

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

Параметры

millisecondsTimeout
Int32

Количество миллисекунд, на которое приостанавливается поток. Если значение аргумента millisecondsTimeout равно нулю, поток освобождает оставшуюся часть своего интервала времени для любого потока с таким же приоритетом, готовым к выполнению. Если других готовых к выполнению потоков с таким же приоритетом нет, выполнение текущего потока не приостанавливается.

Исключения

Значение времени ожидания является отрицательной величиной и не равно Infinite.

Примеры

В следующем примере метод используется для Sleep блокировки потока main приложения.

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.

Комментарии

Выполнение потока операционной системой не будет запланировано на указанный период времени. Этот метод изменяет состояние потока, включив в него WaitSleepJoin.

Можно указать Timeout.Infinite для millisecondsTimeout параметра приостановку потока на неопределенный срок. Однако вместо этого рекомендуется использовать другие System.Threading классы, такие как Mutex, Monitor, EventWaitHandleили Semaphore , для синхронизации потоков или управления ресурсами.

Системные часы тикают с определенной скоростью, называемой разрешением часов. Фактическое время ожидания может не совпадать с заданным временем ожидания, так как указанное время ожидания будет скорректировано в соответствии с тактовами часов. Дополнительные сведения о разрешении часов и времени ожидания см. в разделе Функция спящего режима из системных API Windows.

Этот метод не выполняет стандартную перекачку COM и SendMessage.

Примечание

Если необходимо выполнить спящий режим в потоке с STAThreadAttribute, но вы хотите выполнить стандартную накачку COM и SendMessage, рассмотрите возможность использования одной из перегрузок Join метода, который задает интервал времени ожидания.

Применяется к

Sleep(TimeSpan)

Исходный код:
Thread.cs
Исходный код:
Thread.cs
Исходный код:
Thread.cs

Приостанавливает текущий поток на заданное время.

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

Параметры

timeout
TimeSpan

Время, на которое приостанавливается поток. Если значение аргумента timeout равно Zero, поток освобождает оставшуюся часть своего интервала времени для любого потока с таким же приоритетом, готовым к выполнению. Если других готовых к выполнению потоков с таким же приоритетом нет, выполнение текущего потока не приостанавливается.

Исключения

Значение равно отрицательному значению и не равно миллисекундам Infinite или больше int32.MaxValue миллисекундtimeout.

Примеры

В следующем примере перегрузка Sleep(TimeSpan) метода используется для блокировки потока main приложения пять раз в течение двух секунд каждый раз.

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.

Комментарии

Выполнение потока операционной системой не будет запланировано на указанный период времени. Этот метод изменяет состояние потока, включив в него WaitSleepJoin.

Можно указать Timeout.InfiniteTimeSpan для timeout параметра приостановку потока на неопределенный срок. Однако вместо этого рекомендуется использовать другие System.Threading классы, такие как Mutex, Monitor, EventWaitHandleили Semaphore , для синхронизации потоков или управления ресурсами.

Эта перегрузка использует Sleep общее количество целых миллисекундах в timeout. Доли миллисекунда отбрасываются.

Этот метод не выполняет стандартную перекачку COM и SendMessage.

Примечание

Если необходимо выполнить спящий режим в потоке с STAThreadAttribute, но вы хотите выполнить стандартную накачку COM и SendMessage, рассмотрите возможность использования одной из перегрузок Join метода, который задает интервал времени ожидания.

Применяется к