Bagikan melalui


Thread.Sleep Metode

Definisi

Menangguhkan utas saat ini untuk jumlah waktu yang ditentukan.

Overload

Sleep(Int32)

Menangguhkan utas saat ini untuk jumlah milidetik yang ditentukan.

Sleep(TimeSpan)

Menangguhkan utas saat ini untuk jumlah waktu yang ditentukan.

Sleep(Int32)

Sumber:
Thread.cs
Sumber:
Thread.cs
Sumber:
Thread.cs

Menangguhkan utas saat ini untuk jumlah milidetik yang ditentukan.

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

Parameter

millisecondsTimeout
Int32

Jumlah milidetik di mana utas ditangguhkan. Jika nilai millisecondsTimeout argumen adalah nol, utas melepaskan sisa ikatan waktunya ke utas dengan prioritas yang sama yang siap dijalankan. Jika tidak ada utas lain dengan prioritas yang sama yang siap dijalankan, eksekusi utas saat ini tidak ditangguhkan.

Pengecualian

Nilai waktu habis negatif dan tidak sama dengan Infinite.

Contoh

Contoh berikut menggunakan metode untuk memblokir utas Sleep utama aplikasi.

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.

Keterangan

Utas tidak akan dijadwalkan untuk dieksekusi oleh sistem operasi untuk jumlah waktu yang ditentukan. Metode ini mengubah status utas menjadi menyertakan WaitSleepJoin.

Anda dapat menentukan Timeout.Infinite parameter untuk millisecondsTimeout menangguhkan utas tanpa batas waktu. Namun, kami sarankan Anda menggunakan kelas lain System.Threading seperti Mutex, , EventWaitHandleMonitor, atau Semaphore sebagai gantinya untuk menyinkronkan utas atau mengelola sumber daya.

Jam sistem berdetak pada tingkat tertentu yang disebut resolusi jam. Batas waktu aktual mungkin bukan batas waktu yang ditentukan, karena batas waktu yang ditentukan akan disesuaikan bertepatan dengan jam centang. Untuk informasi selengkapnya tentang resolusi jam dan waktu tunggu, lihat fungsi Tidur dari API sistem Windows.

Metode ini tidak melakukan pemompaan COM dan SendMessage standar.

Catatan

Jika Anda perlu tidur di utas Join yang memiliki STAThreadAttribute, tetapi Anda ingin melakukan pemompaan COM dan SendMessage standar, pertimbangkan untuk menggunakan salah satu kelebihan beban metode yang menentukan interval batas waktu.

Berlaku untuk

Sleep(TimeSpan)

Sumber:
Thread.cs
Sumber:
Thread.cs
Sumber:
Thread.cs

Menangguhkan utas saat ini untuk jumlah waktu yang ditentukan.

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

Parameter

timeout
TimeSpan

Jumlah waktu di mana utas ditangguhkan. Jika nilai timeout argumen adalah Zero, utas melepaskan sisa ikatan waktunya ke utas dengan prioritas yang sama yang siap dijalankan. Jika tidak ada utas lain dengan prioritas yang sama yang siap dijalankan, eksekusi utas saat ini tidak ditangguhkan.

Pengecualian

Nilai timeout negatif dan tidak sama dengan Infinite dalam milidetik, atau lebih besar dari Int32.MaxValue milidetik.

Contoh

Contoh berikut menggunakan metode kelebihan beban untuk memblokir utas Sleep(TimeSpan) utama aplikasi lima kali, selama dua detik setiap kali.

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.

Keterangan

Utas tidak akan dijadwalkan untuk dieksekusi oleh sistem operasi untuk jumlah waktu yang ditentukan. Metode ini mengubah status utas menjadi menyertakan WaitSleepJoin.

Anda dapat menentukan Timeout.InfiniteTimeSpan parameter untuk timeout menangguhkan utas tanpa batas waktu. Namun, kami sarankan Anda menggunakan kelas lain System.Threading seperti Mutex, , EventWaitHandleMonitor, atau Semaphore sebagai gantinya untuk menyinkronkan utas atau mengelola sumber daya.

Kelebihan beban Sleep ini menggunakan jumlah total seluruh milidetik dalam timeout. Milidetik pecahan dibuang.

Metode ini tidak melakukan pemompaan COM dan SendMessage standar.

Catatan

Jika Anda perlu tidur di utas Join yang memiliki STAThreadAttribute, tetapi Anda ingin melakukan pemompaan COM dan SendMessage standar, pertimbangkan untuk menggunakan salah satu kelebihan beban metode yang menentukan interval batas waktu.

Berlaku untuk