Compartir a través de


Función Sleep (synchapi.h)

Suspende la ejecución del subproceso actual hasta que transcurre el intervalo de tiempo de espera.

Para especificar un estado de espera alertable, use la función SleepEx .

Sintaxis

void Sleep(
  [in] DWORD dwMilliseconds
);

Parámetros

[in] dwMilliseconds

Intervalo de tiempo para el que se va a suspender la ejecución, en milisegundos.

Un valor de cero hace que el subproceso vuelva a renunciar al resto de su segmento de tiempo a cualquier otro subproceso que esté listo para ejecutarse. Si no hay otros subprocesos listos para ejecutarse, la función devuelve inmediatamente y el subproceso continúa la ejecución. Windows XP: Un valor de cero hace que el subproceso vuelva a renunciar al resto de su segmento de tiempo a cualquier otro subproceso de igual prioridad que esté listo para ejecutarse. Si no hay otros subprocesos de igual prioridad listos para ejecutarse, la función devuelve inmediatamente y el subproceso continúa la ejecución. Este comportamiento cambió a partir de Windows Server 2003.

Un valor de INFINITE indica que la suspensión no debe agotar el tiempo de espera.

Valor devuelto

None

Observaciones

Esta función hace que un subproceso se relinque el resto de su segmento de tiempo y se vuelva inejecutable para un intervalo basado en el valor de dwMilliseconds. El reloj del sistema "tics" a una velocidad constante. Si dwMilliseconds es menor que la resolución del reloj del sistema, el subproceso puede suspenderse durante menos del tiempo especificado. Si dwMilliseconds es mayor que un tic pero menor que dos, la espera puede estar entre uno y dos tics, etc. Para aumentar la precisión del intervalo de suspensión, llame a la función timeGetDevCaps para determinar la resolución mínima admitida del temporizador y la función timeBeginPeriod para establecer la resolución del temporizador en su mínimo. Tenga cuidado al llamar a timeBeginPeriod, ya que las llamadas frecuentes pueden afectar significativamente al reloj del sistema, el uso de energía del sistema y el programador. Si llama a timeBeginPeriod, llámalo una vez al principio de la aplicación y asegúrate de llamar a la función timeEndPeriod al final de la aplicación.

Una vez transcurrido el intervalo de suspensión, el subproceso está listo para ejecutarse. Si especifica 0 milisegundos, el subproceso renunciará al resto de su segmento de tiempo, pero permanecerá listo. Tenga en cuenta que no se garantiza que un subproceso listo se ejecute inmediatamente. Por lo tanto, es posible que el subproceso no se ejecute hasta que transcurre algún tiempo después del intervalo de suspensión. Para obtener más información, consulte Programación de prioridades.

Tenga cuidado al usar Suspensión en los escenarios siguientes:

  • Código que crea ventanas directa o indirectamente (por ejemplo, DDE y COM CoInitialize). Si un subproceso crea ventanas, debe procesar mensajes. Las difusión de mensajes se envían a todas las ventanas del sistema. Si tiene un subproceso que usa Suspensión con retraso infinito, el sistema interbloqueo.
  • Subprocesos que están bajo control de simultaneidad. Por ejemplo, un puerto de finalización de E/S o un grupo de subprocesos limita el número de subprocesos asociados que se pueden ejecutar. Si el número máximo de subprocesos ya se está ejecutando, no se puede ejecutar ningún subproceso asociado adicional hasta que finalice un subproceso en ejecución. Si un subproceso usa Suspensión con un intervalo de cero para esperar a que uno de los subprocesos asociados adicionales realice algún trabajo, el proceso podría interbloquear.
En estos escenarios, use MsgWaitForMultipleObjects o MsgWaitForMultipleObjectsEx, en lugar de Suspender.

Windows Phone 8.1: esta función es compatible con las aplicaciones de Windows Phone Store en Windows Phone 8.1 y versiones posteriores.

Windows 8.1 y Windows Server 2012 R2: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y versiones posteriores.

Ejemplos

Para obtener un ejemplo, consulte Uso del almacenamiento local de subprocesos.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado synchapi.h (incluye Windows.h en Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib; WindowsPhoneCore.lib en Windows Phone 8.1
Archivo DLL Kernel32.dll; KernelBase.dll en Windows Phone 8.1

Consulte también

MsgWaitForMultipleObjects

MsgWaitForMultipleObjectsEx

Funciones de proceso y subproceso

SleepEx

Suspender la ejecución de subprocesos

Subprocesos

WaitOnAddress