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 метода, который задает интервал времени ожидания.