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.
 */
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 同期したりリソースを管理したりするには、代わりに、、、、などの他のクラスを使用することをお勧めします。

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

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

注意

を持つスレッドでスリープする必要があり、標準の COM および SendMessage ポンプを実行する必要がある場合は STAThreadAttributeJoin タイムアウト間隔を指定するメソッドのオーバーロードの1つを使用することを検討してください。

適用対象

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 (ミリ秒単位) と等しくないか、または MaxValue ミリ秒を超えています。

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

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.

注釈

スレッドは、指定された時間の間、オペレーティング システムによって実行がスケジュールされていません。 このメソッドは、 を含むスレッドの状態を変更します WaitSleepJoin

スレッドを Timeout.InfiniteTimeSpan 無期限に timeout 中断するパラメーターを指定できます。 ただし、スレッドの同期やリソースの管理には、 などの他のクラスを使用 System.Threading Mutex Monitor EventWaitHandle Semaphore することをお勧めします。

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

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

注意

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

適用対象