snapshot before regression test

This commit is contained in:
t
2026-07-18 19:25:40 +08:00
commit 796222a300
2295 changed files with 206453 additions and 0 deletions

53
includes/condition.py Normal file
View File

@@ -0,0 +1,53 @@
import t, c
from stdint import *
from w32.win32base import *
from w32.win32sync import (
CRITICAL_SECTION,
InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection, DeleteCriticalSection,
InitializeConditionVariable, SleepConditionVariableCS,
WakeConditionVariable, WakeAllConditionVariable
)
@t.Object
class Condition:
"""基于 Windows 条件变量的条件变量,内部包含 CRITICAL_SECTION。
用法:
cond: Condition = Condition()
with cond:
while not ready:
cond.wait()
cond.notify()
"""
cond_var: VOIDPTR
cs: CRITICAL_SECTION
def __init__(self):
InitializeCriticalSection(c.Addr(self.cs))
InitializeConditionVariable(c.Addr(self.cond_var))
def wait(self, timeout_ms: ULONG = INFINITE) -> BOOL:
return SleepConditionVariableCS(c.Addr(self.cond_var), c.Addr(self.cs), timeout_ms)
def notify(self):
WakeConditionVariable(c.Addr(self.cond_var))
def notify_all(self):
WakeAllConditionVariable(c.Addr(self.cond_var))
def acquire(self):
EnterCriticalSection(c.Addr(self.cs))
def release(self):
LeaveCriticalSection(c.Addr(self.cs))
def __enter__(self) -> 'Condition' | t.CPtr:
self.acquire()
return self
def __exit__(self):
self.release()
def delete(self):
DeleteCriticalSection(c.Addr(self.cs))