Thread.Sleep Método

Definición

Suspende el subproceso actual durante la cantidad de tiempo especificada.Suspends the current thread for the specified amount of time.

Sobrecargas

Sleep(Int32)

Suspende el subproceso actual durante el número de milisegundos especificado.Suspends the current thread for the specified number of milliseconds.

Sleep(TimeSpan)

Suspende el subproceso actual durante la cantidad de tiempo especificada.Suspends the current thread for the specified amount of time.

Sleep(Int32)

Suspende el subproceso actual durante el número de milisegundos especificado.Suspends the current thread for the specified number of milliseconds.

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

Parámetros

millisecondsTimeout
Int32

Número de milisegundos durante los que el subproceso está suspendido.The number of milliseconds for which the thread is suspended. Si el valor del argumento millisecondsTimeout es cero, el subproceso cede el resto de su porción de tiempo a cualquier subproceso de idéntica prioridad que está listo para ejecutarse.If the value of the millisecondsTimeout argument is zero, the thread relinquishes the remainder of its time slice to any thread of equal priority that is ready to run. Si no hay ningún otro subproceso de igual prioridad que está listo para ejecutarse, no se suspende la ejecución del subproceso actual.If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

Excepciones

El valor de tiempo de espera es negativo y no es igual a Infinite.The time-out value is negative and is not equal to Infinite.

Ejemplos

En el ejemplo siguiente se usa el método Sleep para bloquear el subproceso principal de la aplicación.The following example uses the Sleep method to block the application's main thread.

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.

Comentarios

El sistema operativo no programará la ejecución del subproceso durante el tiempo especificado.The thread will not be scheduled for execution by the operating system for the amount of time specified. Este método cambia el estado del subproceso para incluir WaitSleepJoin.This method changes the state of the thread to include WaitSleepJoin.

Puede especificar Timeout.Infinite para el parámetro millisecondsTimeout para suspender el subproceso indefinidamente.You can specify Timeout.Infinite for the millisecondsTimeout parameter to suspend the thread indefinitely. Sin embargo, se recomienda usar otras clases System.Threading como Mutex, Monitor, EventWaitHandleo Semaphore en su lugar para sincronizar subprocesos o administrar recursos.However, we recommend that you use other System.Threading classes such as Mutex, Monitor, EventWaitHandle, or Semaphore instead to synchronize threads or manage resources.

El reloj del sistema realiza el paso a una tasa específica denominada resolución del reloj.The system clock ticks at a specific rate called the clock resolution. Es posible que el tiempo de espera real no sea exactamente el tiempo de espera especificado, porque el tiempo de espera especificado se ajustará para que coincida con los tics del reloj.The actual timeout might not be exactly the specified timeout, because the specified timeout will be adjusted to coincide with clock ticks. Para obtener más información sobre la resolución del reloj y el tiempo de espera, vea el tema sobre la función SLEEP .For more information on clock resolution and the waiting time, see the Sleep function topic. Este método llama a la función SLEEP desde las API del sistema de Windows.This method calls the Sleep function from the Windows system APIs.

Este método no realiza bombeo de SendMessage y COM estándar.This method does not perform standard COM and SendMessage pumping.

Nota

Si tiene que entrar en modo de suspensión en un subproceso que tiene STAThreadAttribute, pero desea realizar la bombeo de SendMessage y COM estándar, considere la posibilidad de usar una de las sobrecargas del método Join que especifica un intervalo de tiempo de espera.If you need to sleep on a thread that has STAThreadAttribute, but you want to perform standard COM and SendMessage pumping, consider using one of the overloads of the Join method that specifies a timeout interval.

Sleep(TimeSpan)

Suspende el subproceso actual durante la cantidad de tiempo especificada.Suspends the current thread for the specified amount of time.

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

Parámetros

timeout
TimeSpan

Cantidad de tiempo durante la que el subproceso está suspendido.The amount of time for which the thread is suspended. Si el valor del argumento millisecondsTimeout es Zero, el subproceso cede el resto de su porción de tiempo a cualquier subproceso de idéntica prioridad que está listo para ejecutarse.If the value of the millisecondsTimeout argument is Zero, the thread relinquishes the remainder of its time slice to any thread of equal priority that is ready to run. Si no hay ningún otro subproceso de igual prioridad que está listo para ejecutarse, no se suspende la ejecución del subproceso actual.If there are no other threads of equal priority that are ready to run, execution of the current thread is not suspended.

Excepciones

El valor de timeout es negativo y no es igual a Infinite en milisegundos, o es superior a MaxValue milisegundos.The value of timeout is negative and is not equal to Infinite in milliseconds, or is greater than MaxValue milliseconds.

Ejemplos

En el ejemplo siguiente se usa la sobrecarga del método Sleep(TimeSpan) para bloquear cinco veces el subproceso principal de la aplicación, dos segundos cada vez.The following example uses the Sleep(TimeSpan) method overload to block the application's main thread five times, for two seconds each time.

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.

Comentarios

El sistema operativo no programará la ejecución del subproceso durante el tiempo especificado.The thread will not be scheduled for execution by the operating system for the amount of time specified. Este método cambia el estado del subproceso para incluir WaitSleepJoin.This method changes the state of the thread to include WaitSleepJoin.

Puede especificar Timeout.InfiniteTimeSpan para el parámetro timeout para suspender el subproceso indefinidamente.You can specify Timeout.InfiniteTimeSpan for the timeout parameter to suspend the thread indefinitely. Sin embargo, se recomienda usar otras clases System.Threading como Mutex, Monitor, EventWaitHandleo Semaphore en su lugar para sincronizar subprocesos o administrar recursos.However, we recommend that you use other System.Threading classes such as Mutex, Monitor, EventWaitHandle, or Semaphore instead to synchronize threads or manage resources.

Esta sobrecarga de Sleep usa el número total de milisegundos enteros en timeout.This overload of Sleep uses the total number of whole milliseconds in timeout. Se descartan los milisegundos fraccionarios.Fractional milliseconds are discarded.

Este método no realiza bombeo de SendMessage y COM estándar.This method does not perform standard COM and SendMessage pumping.

Nota

Si tiene que entrar en modo de suspensión en un subproceso que tiene STAThreadAttribute, pero desea realizar la bombeo de SendMessage y COM estándar, considere la posibilidad de usar una de las sobrecargas del método Join que especifica un intervalo de tiempo de espera.If you need to sleep on a thread that has STAThreadAttribute, but you want to perform standard COM and SendMessage pumping, consider using one of the overloads of the Join method that specifies a timeout interval.

Se aplica a