Condividi tramite


Funzione Sleep (synchapi.h)

Sospende l'esecuzione del thread corrente fino alla scadenza dell'intervallo di timeout.

Per immettere uno stato di attesa avvisabile, usare la funzione SleepEx .

Sintassi

void Sleep(
  [in] DWORD dwMilliseconds
);

Parametri

[in] dwMilliseconds

Intervallo di tempo per il quale l'esecuzione deve essere sospesa, in millisecondi.

Un valore pari a zero fa sì che il thread rinunci al resto della sezione temporale a qualsiasi altro thread pronto per l'esecuzione. Se non sono disponibili altri thread pronti per l'esecuzione, la funzione viene restituita immediatamente e il thread continua l'esecuzione. Windows XP: Il valore zero fa sì che il thread rinunci al resto della sezione temporale a qualsiasi altro thread di uguale priorità pronto per l'esecuzione. Se non sono presenti altri thread con priorità uguale pronti per l'esecuzione, la funzione restituisce immediatamente e il thread continua l'esecuzione. Questo comportamento è cambiato a partire da Windows Server 2003.

Il valore INFINITE indica che la sospensione non deve scadere.

Valore restituito

nessuno

Osservazioni

Questa funzione fa sì che un thread rinunci al resto della sezione temporale e diventi non eseguibile per un intervallo in base al valore di dwMilliseconds. L'orologio di sistema "ticks" a una frequenza costante. Se dwMilliseconds è minore della risoluzione dell'orologio di sistema, il thread può dormire per meno del periodo di tempo specificato. Se dwMilliseconds è maggiore di un tick ma minore di due, l'attesa può essere compresa tra uno e due tick e così via. Per aumentare l'accuratezza dell'intervallo di sospensione, chiamare la funzione timeGetDevCaps per determinare la risoluzione minima del timer supportata e la funzione timeBeginPeriod per impostare la risoluzione del timer sul valore minimo. Prestare attenzione quando si chiama timeBeginPeriod, poiché le chiamate frequenti possono influire in modo significativo sull'orologio di sistema, sull'utilizzo dell'alimentazione del sistema e sull'utilità di pianificazione. Se si chiama timeBeginPeriod, chiamarlo una volta all'inizio dell'applicazione e assicurarsi di chiamare la funzione timeEndPeriod alla fine dell'applicazione.

Dopo aver superato l'intervallo di sospensione, il thread è pronto per l'esecuzione. Se si specificano 0 millisecondi, il thread rinuncerà al resto del periodo di tempo ma rimarrà pronto. Si noti che non è garantito l'esecuzione immediata di un thread pronto. Di conseguenza, il thread potrebbe non essere eseguito fino a un certo periodo di tempo dopo l'intervallo di sospensione. Per altre informazioni, vedere Pianificazione delle priorità.

Prestare attenzione quando si usa Sospensione negli scenari seguenti:

  • Codice che crea direttamente o indirettamente finestre (ad esempio, DDE e COM CoInitialize). Se un thread crea finestre, deve elaborare i messaggi. Le trasmissioni dei messaggi vengono inviate a tutte le finestre del sistema. Se si dispone di un thread che usa Sospensione con ritardo infinito, il sistema eseguirà il deadlock.
  • Thread sotto il controllo della concorrenza. Ad esempio, una porta di completamento I/O o un pool di thread limita il numero di thread associati che possono essere eseguiti. Se il numero massimo di thread è già in esecuzione, nessun thread associato aggiuntivo può essere eseguito fino al termine di un thread in esecuzione. Se un thread usa Sospensione con un intervallo pari a zero per attendere che uno dei thread associati aggiuntivi eselabori alcune operazioni, il processo potrebbe causare un deadlock.
Per questi scenari, usare MsgWaitForMultipleObjects o MsgWaitForMultipleObjectsEx, anziché Sospensione.

Windows Phone 8.1: questa funzione è supportata per Windows Phone app dello Store in Windows Phone 8.1 e versioni successive.

Windows 8.1 e Windows Server 2012 R2: questa funzione è supportata per le app di Windows Store in Windows 8.1, Windows Server 2012 R2 e versioni successive.

Esempio

Per un esempio, vedere Uso dell'archiviazione locale del thread.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione synchapi.h (include Windows.h in Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Libreria Kernel32.lib; WindowsPhoneCore.lib in Windows Phone 8.1
DLL Kernel32.dll; KernelBase.dll Windows Phone 8.1

Vedi anche

MsgWaitForMultipleObjects

MsgWaitForMultipleObjectsEx

Funzioni di processi e thread

SleepEx

Sospensione dell'esecuzione del thread

Thread

WaitOnAddress