SleepConditionVariableCS-Funktion (synchapi.h)

Schläft für die angegebene Bedingungsvariable und gibt den angegebenen kritischen Abschnitt als atomischen Vorgang frei.

Syntax

BOOL SleepConditionVariableCS(
  [in, out] PCONDITION_VARIABLE ConditionVariable,
  [in, out] PCRITICAL_SECTION   CriticalSection,
  [in]      DWORD               dwMilliseconds
);

Parameter

[in, out] ConditionVariable

Ein Zeiger auf die Bedingungsvariable. Diese Variable muss mit der InitializeConditionVariable-Funktion initialisiert werden.

[in, out] CriticalSection

Ein Zeiger auf das Kritische Abschnittsobjekt. Dieser kritische Abschnitt muss vom Aufrufer zum Zeitpunkt des Aufrufs von SleepConditionVariableCS genau einmal eingegeben werden.

[in] dwMilliseconds

Das Timeoutintervall in Millisekunden. Wenn das Timeoutintervall verstrichen ist, ruft die Funktion den kritischen Abschnitt erneut ab und gibt null zurück. Wenn dwMilliseconds null ist, testet die Funktion den Zustand der angegebenen Objekte und gibt sofort zurück. Wenn dwMillisecondsINFINITE ist, vergeht das Timeoutintervall der Funktion nie. Weitere Informationen finden Sie in den Hinweisen.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlschlägt oder das Timeoutintervall verstrichen ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf. Mögliche Fehlercodes sind ERROR_TIMEOUT, die angibt, dass das Timeoutintervall abgelaufen ist, bevor ein anderer Thread versucht hat, den Ruhethread zu reaktivieren.

Hinweise

Ein Thread, der sich in einer Bedingungsvariablen befindet, kann mit der WakeConditionVariable - oder WakeAllConditionVariable-Funktion vor Ablauf des angegebenen Timeoutintervalls aktiviert werden. In diesem Fall wird der Thread reaktiviert, wenn die Aktivierungsverarbeitung abgeschlossen ist, und nicht, wenn sein Timeoutintervall verstrichen ist. Nachdem der Thread aktiviert wurde, ruft er den kritischen Abschnitt wieder ab, der beim Eintritt des Threads in den Ruhezustand freigegeben wurde.

Bedingungsvariablen Weckvorgängen (die nicht mit einer expliziten Aktivierung verbunden sind) und gestohlenen Aktivierungen (ein anderer Thread kann vor dem wachen Thread ausgeführt werden). Daher sollten Sie ein Prädikat (in der Regel in einer while Schleife) erneut überprüfen, nachdem ein Ruhezustandsvorgang zurückgegeben wurde.

Beispiele

Ein Beispiel, das diese Funktion verwendet, finden Sie unter Verwenden von Bedingungsvariablen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile synchapi.h (einschließen von Windows.h unter Windows 7, Windows Server 2008 Windows Server 2008 R2)
Bibliothek Kernel32.lib
DLL Kernel32.dll

Siehe auch

Bedingungsvariablen

Synchronisierungsfunktionen

In VBS-Enclaves verfügbare Vertdll-APIs