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 |