SleepConditionVariableCS
SleepConditionVariableCS atomically releases the critical section and waits on the condition variable. When awakened (either by signal or timeout), the critical section is automatically reacquired before returning.
Syntax
BOOL SleepConditionVariableCS(
PCONDITION_VARIABLE pConditionVariable,
LPCRITICAL_SECTION pCriticalSection,
DWORD dwMilliseconds
);
Parameters
pConditionVariable
A pointer to the condition variable
pCriticalSection
A pointer to the critical section to release. The critical section must be owned by the caller.
dwMilliseconds
The timeout interval in milliseconds. Use INFINITE for no timeout.
Return Value
This function returns TRUE if signaled. It returns FALSE if a timeout or error occurs.
Remarks
- The critical section is released atomically before waiting. It is reacquired before the function returns.
- The caller must own the critical section before calling.
- On timeout, this function sets last error to ERROR_TIMEOUT.
- When a parameter is NULL, this function returns FALSE and sets last error to ERROR_INVALID_PARAMETER.
Requirements
| Minimum supported version | Header | Library |
|---|---|---|
|
wRTOS 1.1 SDK |
windows.h |
wRTOS_rtss.lib |
Example
CONDITION_VARIABLE cv;
CRITICAL_SECTION cs;
BOOL condition = FALSE;
InitializeConditionVariable(&cv);
InitializeCriticalSection(&cs);
// Waiter thread
EnterCriticalSection(&cs);
while (!condition) {
SleepConditionVariableCS(&cv, &cs, INFINITE);
}
LeaveCriticalSection(&cs);
// Signaler thread
EnterCriticalSection(&cs);
condition = TRUE;
WakeConditionVariable(&cv);
LeaveCriticalSection(&cs);
See Also:
- RTL_CONDITION_VARIABLE
- InitializeConditionVariable
- SleepConditionVariableSRW
- WakeConditionVariable
- WakeAllConditionVariable