Thread.Sleep Méthode

Définition

Suspend le thread actuel pendant la durée spécifiée.

Surcharges

Sleep(Int32)

Suspend le thread actuel pendant le nombre spécifié de millisecondes.

Sleep(TimeSpan)

Suspend le thread actuel pendant la durée spécifiée.

Sleep(Int32)

Suspend le thread actuel pendant le nombre spécifié de millisecondes.

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

Paramètres

millisecondsTimeout
Int32

Nombre de millisecondes pendant lesquelles le thread est suspendu. Si la valeur de l'argument millisecondsTimeout est égale à zéro, le thread abandonne le reste de sa tranche de temps à n'importe quel thread de priorité égale prêt à être exécuté. S'il n'existe pas d'autres threads de priorité égale prêts à être exécutés, l'exécution du thread actuel n'est pas suspendue.

Exceptions

La valeur du délai d’attente est négative et n’est pas égale à Infinite.

Exemples

L’exemple suivant utilise la Sleep méthode pour bloquer le thread main de l’application.

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.

Remarques

L’exécution du thread n’est pas planifiée par le système d’exploitation pendant la durée spécifiée. Cette méthode modifie l’état du thread pour inclure WaitSleepJoin.

Vous pouvez spécifier Timeout.Infinite que le millisecondsTimeout paramètre suspend le thread indéfiniment. Toutefois, nous vous recommandons d’utiliser d’autres System.Threading classes telles que Mutex, Monitor, EventWaitHandleou Semaphore à la place pour synchroniser des threads ou gérer des ressources.

L’horloge système se déclenche à un rythme spécifique appelé résolution d’horloge. Le délai d’expiration réel peut ne pas être exactement le délai d’expiration spécifié, car le délai d’expiration spécifié sera ajusté pour coïncider avec les cycles d’horloge. Pour plus d’informations sur la résolution d’horloge et le temps d’attente, consultez la fonction Veille à partir des API système Windows.

Cette méthode n’effectue pas de pompage COM et SendMessage standard.

Notes

Si vous devez mettre en veille sur un thread qui a STAThreadAttribute, mais que vous souhaitez effectuer un pompage COM et SendMessage standard, envisagez d’utiliser l’une des surcharges de la Join méthode qui spécifie un intervalle de délai d’expiration.

S’applique à

Sleep(TimeSpan)

Suspend le thread actuel pendant la durée spécifiée.

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

Paramètres

timeout
TimeSpan

Durée pendant laquelle le thread est suspendu. Si la valeur de l’argument timeout est Zero, le thread abandonne le reste de sa tranche de temps à n’importe quel thread de priorité égale prêt à être exécuté. S'il n'existe pas d'autres threads de priorité égale prêts à être exécutés, l'exécution du thread actuel n'est pas suspendue.

Exceptions

La valeur de timeout est négative et n’est pas égale à en millisecondes, ou est supérieure à InfiniteInt32.MaxValue millisecondes.

Exemples

L’exemple suivant utilise la Sleep(TimeSpan) surcharge de méthode pour bloquer cinq fois le thread main de l’application, pendant deux secondes à chaque fois.

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.

Remarques

L’exécution du thread n’est pas planifiée par le système d’exploitation pendant la durée spécifiée. Cette méthode modifie l’état du thread pour inclure WaitSleepJoin.

Vous pouvez spécifier Timeout.InfiniteTimeSpan que le timeout paramètre suspend le thread indéfiniment. Toutefois, nous vous recommandons d’utiliser d’autres System.Threading classes telles que Mutex, Monitor, EventWaitHandleou Semaphore à la place pour synchroniser des threads ou gérer des ressources.

Cette surcharge de Sleep utilise le nombre total de millisecondes entières dans timeout. Les fractions de millisecondes sont ignorées.

Cette méthode n’effectue pas de pompage COM et SendMessage standard.

Notes

Si vous devez mettre en veille sur un thread qui a STAThreadAttribute, mais que vous souhaitez effectuer un pompage COM et SendMessage standard, envisagez d’utiliser l’une des surcharges de la Join méthode qui spécifie un intervalle de délai d’expiration.

S’applique à