from stdint import * from win32.win32base import * from win32.win32sync import ( CRITICAL_SECTION, CONDITION_VARIABLE, InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection, DeleteCriticalSection, InitializeConditionVariable, SleepConditionVariableCS, WakeConditionVariable, WakeAllConditionVariable ) class Condition: """Windows condition variable backed primitive, internally bundled with CRITICAL_SECTION. Usage: cond: Condition = Condition() with cond: while not ready: cond.wait() cond.notify() """ cond_var: CONDITION_VARIABLE cs: CRITICAL_SECTION def __init__(self): InitializeCriticalSection(&self.cs) InitializeConditionVariable(&self.cond_var) def wait(self, timeout_ms: ULONG = INFINITE) -> BOOL: return SleepConditionVariableCS(&self.cond_var, &self.cs, timeout_ms) def notify(self): WakeConditionVariable(&self.cond_var) def notify_all(self): WakeAllConditionVariable(&self.cond_var) def acquire(self): EnterCriticalSection(&self.cs) def release(self): LeaveCriticalSection(&self.cs) def __enter__(self) -> Condition*: self.acquire() return self def __exit__(self): self.release() def delete(self): DeleteCriticalSection(&self.cs)