Auf Englisch lesen

Freigeben über


Sleep-Funktion (synchapi.h)

Hält die Ausführung des aktuellen Threads an, bis das Timeoutintervall abgelaufen ist.

Verwenden Sie die SleepEx-Funktion , um einen warnbaren Wartezustand zu wechseln.

Syntax

void Sleep(
  [in] DWORD dwMilliseconds
);

Parameter

[in] dwMilliseconds

Das Zeitintervall, für das die Ausführung angehalten werden soll( in Millisekunden).

Der Wert 0 (null) bewirkt, dass der Thread den Rest seines Zeitslices an jeden anderen Thread übergibt, der ausgeführt werden kann. Wenn keine anderen Threads ausgeführt werden können, wird die Funktion sofort zurückgegeben, und der Thread setzt die Ausführung fort. Windows XP: Der Wert 0 (null) bewirkt, dass der Thread den Rest seines Zeitslices an einen anderen Thread mit gleicher Priorität übergibt, der zur Ausführung bereit ist. Wenn keine anderen Threads mit gleicher Priorität ausgeführt werden können, wird die Funktion sofort zurückgegeben, und der Thread setzt die Ausführung fort. Dieses Verhalten hat sich ab Windows Server 2003 geändert.

Der Wert INFINITE gibt an, dass für die Unterbrechung kein Timeout ausgeführt werden soll.

Rückgabewert

Keine

Bemerkungen

Diese Funktion bewirkt, dass ein Thread den Rest seines Zeitsegments aufgibt und für ein Intervall nicht ausgeführt werden kann, das auf dem Wert von dwMilliseconds basiert. Die Systemuhr "tickt" mit einer konstanten Rate. Wenn dwMilliseconds kleiner als die Auflösung der Systemuhr ist, kann der Thread weniger als die angegebene Zeit in den Ruhezustand versetzt werden. Wenn dwMilliseconds größer als ein Tick, aber kleiner als zwei ist, kann die Wartezeit zwischen ein und zwei Ticks usw. betragen. Um die Genauigkeit des Standbyintervalls zu erhöhen, rufen Sie die timeGetDevCaps-Funktion auf, um die unterstützte minimale Timerauflösung zu bestimmen, und die timeBeginPeriod-Funktion , um die Timerauflösung auf ihr Minimum festzulegen. Gehen Sie beim Aufrufen von timeBeginPeriod vorsichtig vor, da sich häufige Anrufe erheblich auf die Systemuhr, die Systemenergienutzung und den Scheduler auswirken können. Wenn Sie timeBeginPeriod aufrufen, rufen Sie es einmal früh in der Anwendung auf, und achten Sie darauf, dass Sie die timeEndPeriod-Funktion ganz am Ende der Anwendung aufrufen.

Nachdem das Standbyintervall abgelaufen ist, kann der Thread ausgeführt werden. Wenn Sie 0 Millisekunden angeben, gibt der Thread den Rest seines Zeitsegments auf, bleibt aber bereit. Beachten Sie, dass ein bereiter Thread nicht garantiert sofort ausgeführt wird. Daher wird der Thread möglicherweise erst nach Ablauf des Standbyintervalls ausgeführt. Weitere Informationen finden Sie unter Planungsprioritäten.

Seien Sie vorsichtig, wenn Sie den Standbymodus in den folgenden Szenarien verwenden:

  • Code, der direkt oder indirekt Fenster erstellt (z. B. DDE und COM CoInitialize). Wenn ein Thread Fenster erstellt, muss er Meldungen verarbeiten. Nachrichtenübertragungen werden an alle Fenster im System gesendet. Wenn Sie über einen Thread verfügen, der Den Standbymodus mit unendlicher Verzögerung verwendet, wird das System deadlockt.
  • Threads, die unter Parallelitätssteuerung stehen. Beispielsweise beschränkt ein E/A-Vervollständigungsport oder Threadpool die Anzahl der zugeordneten Threads, die ausgeführt werden können. Wenn die maximale Anzahl von Threads bereits ausgeführt wird, kann kein zusätzlicher zugeordneter Thread ausgeführt werden, bis ein ausgeführter Thread abgeschlossen ist. Wenn ein Thread den Ruhezustand mit einem Intervall von 0 (null) verwendet, um auf einen der zusätzlichen zugeordneten Threads zu warten, um einige Arbeit zu erledigen, kann der Prozess zu einem Deadlock führen.
Verwenden Sie für diese Szenarien MsgWaitForMultipleObjects oder MsgWaitForMultipleObjectsEx anstelle von Sleep.

Windows Phone 8.1: Diese Funktion wird für Windows Phone Store-Apps ab Windows Phone 8.1 unterstützt.

Windows 8.1 und Windows Server 2012 R2: Diese Funktion wird für Windows Store-Apps auf Windows 8.1, Windows Server 2012 R2 und höher unterstützt.

Beispiele

Ein Beispiel finden Sie unter Verwenden des lokalen Threadspeichers.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile synchapi.h (einschließlich Windows.h unter Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Bibliothek Kernel32.lib; WindowsPhoneCore.lib auf Windows Phone 8.1
DLL Kernel32.dll; KernelBase.dll am Windows Phone 8.1

Weitere Informationen

MsgWaitForMultipleObjects

MsgWaitForMultipleObjectsEx

Prozess- und Threadfunktionen

SleepEx

Anhalten der Threadausführung

Threads

WaitOnAddress