Thread.Sleep Метод

Определение

Приостанавливает текущий поток на заданное время.Suspends the current thread for the specified amount of time.

Перегрузки

Sleep(Int32)

Приостанавливает текущий поток на заданное количество миллисекунд.Suspends the current thread for the specified number of milliseconds.

Sleep(TimeSpan)

Приостанавливает текущий поток на заданное время.Suspends the current thread for the specified amount of time.

Sleep(Int32)

Приостанавливает текущий поток на заданное количество миллисекунд.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)

Параметры

millisecondsTimeout
Int32

Количество миллисекунд, на которое приостанавливается поток.The number of milliseconds for which the thread is suspended. Если значение аргумента millisecondsTimeout равно нулю, поток освобождает оставшуюся часть своего интервала времени для любого потока с таким же приоритетом, готовым к выполнению.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. Если других готовых к выполнению потоков с таким же приоритетом нет, выполнение текущего потока не приостанавливается.If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

Исключения

Значение времени ожидания является отрицательной величиной и не равно Infinite.The time-out value is negative and is not equal to Infinite.

Примеры

В следующем примере используется метод Sleep для блокировки основного потока приложения.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.

Комментарии

Выполнение потока не будет запланировано операционной системой на указанный период времени.The thread will not be scheduled for execution by the operating system for the amount of time specified. Этот метод изменяет состояние потока, чтобы оно включало WaitSleepJoin.This method changes the state of the thread to include WaitSleepJoin.

Можно указать Timeout.Infinite для параметра millisecondsTimeout, чтобы приостановить поток бесконечно.You can specify Timeout.Infinite for the millisecondsTimeout parameter to suspend the thread indefinitely. Однако рекомендуется использовать другие классы System.Threading, такие как Mutex, Monitor, EventWaitHandle или Semaphore, а также синхронизировать потоки или управлять ресурсами.However, we recommend that you use other System.Threading classes such as Mutex, Monitor, EventWaitHandle, or Semaphore instead to synchronize threads or manage resources.

Системные тактовые импульсы с заданной скоростью, называемой разрешением часов.The system clock ticks at a specific rate called the clock resolution. Фактическое время ожидания может быть не равно указанному времени ожидания, так как указанное время ожидания будет изменено в соответствии с тактами времени.The actual timeout might not be exactly the specified timeout, because the specified timeout will be adjusted to coincide with clock ticks. Дополнительные сведения о разрешении часов и времени ожидания см. в разделе функция спящего режима .For more information on clock resolution and the waiting time, see the Sleep function topic. Этот метод вызывает функцию Sleep из системных API Windows.This method calls the Sleep function from the Windows system APIs.

Этот метод не выполняет стандартные конвейеры COM и SendMessage.This method does not perform standard COM and SendMessage pumping.

Примечание

Если необходимо включить спящий режим в потоке, который имеет STAThreadAttribute, но вы хотите выполнить стандартные выгрузки COM и SendMessage, рассмотрите возможность использования одной из перегруженных версий метода Join, указывающего интервал времени ожидания.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)

Приостанавливает текущий поток на заданное время.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)

Параметры

timeout
TimeSpan

Время, на которое приостанавливается поток.The amount of time for which the thread is suspended. Если значение аргумента millisecondsTimeout равно Zero, поток освобождает оставшуюся часть своего интервала времени для любого потока с таким же приоритетом, готовым к выполнению.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. Если других готовых к выполнению потоков с таким же приоритетом нет, выполнение текущего потока не приостанавливается.If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

Исключения

Значение timeout является отрицательным и не равно Infinite (в миллисекундах) или больше MaxValue миллисекунд.The value of timeout is negative and is not equal to Infinite in milliseconds, or is greater than MaxValue milliseconds.

Примеры

В следующем примере используется перегрузка метода Sleep(TimeSpan) для блокирования основного потока приложения пять раз, в течение двух секунд каждый раз.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.

Комментарии

Выполнение потока не будет запланировано операционной системой на указанный период времени.The thread will not be scheduled for execution by the operating system for the amount of time specified. Этот метод изменяет состояние потока, чтобы оно включало WaitSleepJoin.This method changes the state of the thread to include WaitSleepJoin.

Можно указать Timeout.InfiniteTimeSpan для параметра timeout, чтобы приостановить поток бесконечно.You can specify Timeout.InfiniteTimeSpan for the timeout parameter to suspend the thread indefinitely. Однако рекомендуется использовать другие классы System.Threading, такие как Mutex, Monitor, EventWaitHandle или Semaphore, а также синхронизировать потоки или управлять ресурсами.However, we recommend that you use other System.Threading classes such as Mutex, Monitor, EventWaitHandle, or Semaphore instead to synchronize threads or manage resources.

Эта перегрузка Sleep используется для общего числа целых миллисекунд в timeout.This overload of Sleep uses the total number of whole milliseconds in timeout. Доли миллисекунд отбрасываются.Fractional milliseconds are discarded.

Этот метод не выполняет стандартные конвейеры COM и SendMessage.This method does not perform standard COM and SendMessage pumping.

Примечание

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

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