Thread.Sleep メソッド

定義

指定した時間の長さにわたって現在のスレッドを中断します。

オーバーロード

Sleep(Int32)

指定したミリ秒数の間現在のスレッドを中断します。

Sleep(TimeSpan)

指定した時間の長さにわたって現在のスレッドを中断します。

Sleep(Int32)

指定したミリ秒数の間現在のスレッドを中断します。

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 引数の値が 0 である場合は、スレッドは自らのタイム スライスの残りの部分を放棄し、実行する準備ができている同じ優先順位の他のスレッドに渡します。 優先順位が同じで実行する準備ができている他のスレッドが存在しない場合は、現在のスレッドの実行は中断されません。

例外

タイムアウト値が負の値で、Infinite に等しくありません。

次の例では、 メソッドをSleep使用して、アプリケーションのメイン スレッドをブロックします。

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むようにスレッドの状態を変更します。

パラメーターに、スレッドをmillisecondsTimeout無期限に中断するように 指定Timeout.Infiniteできます。 ただし、スレッドの同期やリソースの管理には、代わりに 、MonitorEventWaitHandleSemaphore などのMutexSystem.Threadingのクラスを使用することをお勧めします。

システム クロックは、クロック解像度と呼ばれる特定のレートでティックします。 実際のタイムアウトは、指定したタイムアウトがクロック ティックと一致するように調整されるため、正確には指定されたタイムアウトではない可能性があります。 クロック解像度と待機時間の詳細については、「Windows システム API からの Sleep 関数 」を参照してください。

このメソッドは、標準の COM および SendMessage ポンプを実行しません。

Note

を含むスレッドでスリープ状態にする必要があるが、標準の COM および SendMessage ポンプを実行する場合は STAThreadAttribute、タイムアウト間隔を指定する メソッドのいずれかのオーバーロードを Join 使用することを検討してください。

適用対象

Sleep(TimeSpan)

指定した時間の長さにわたって現在のスレッドを中断します。

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 である場合は、スレッドは自らのタイム スライスの残りの部分を放棄し、実行する準備ができている同じ優先順位の他のスレッドに渡します。 優先順位が同じで実行する準備ができている他のスレッドが存在しない場合は、現在のスレッドの実行は中断されません。

例外

timeout 値は負の値で、ミリ秒単位に等しくない Infinite か、 Int32.MaxValue ミリ秒を超えています。

次の例では、 メソッド オーバーロードをSleep(TimeSpan)使用して、アプリケーションの メイン スレッドを毎回 2 秒間 5 回ブロックします。

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無期限に中断するように 指定Timeout.InfiniteTimeSpanできます。 ただし、スレッドの同期やリソースの管理には、代わりに 、MonitorEventWaitHandleSemaphore などのMutexSystem.Threadingのクラスを使用することをお勧めします。

のこのオーバーロード Sleep では、 のミリ秒全体の合計数が使用されます timeout。 ミリ秒の小数部は破棄されます。

このメソッドは、標準の COM および SendMessage ポンプを実行しません。

Note

を含むスレッドでスリープ状態にする必要があるが、標準の COM および SendMessage ポンプを実行する場合は STAThreadAttribute、タイムアウト間隔を指定する メソッドのいずれかのオーバーロードを Join 使用することを検討してください。

適用対象