import t from stdint import * from w32.win32base import * class CRITICAL_SECTION(): DebugInfo: VOIDPTR LockCount: LONG RecursionCount: LONG OwningThread: HANDLE LockSemaphore: HANDLE SpinCount: QWORD extern def InitializeCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID extern def EnterCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID extern def LeaveCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID extern def DeleteCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> VOID extern def TryEnterCriticalSection(lpCriticalSection: CRITICAL_SECTION | t.CPtr) -> BOOL extern def SetCriticalSectionSpinCount(lpCriticalSection: CRITICAL_SECTION | t.CPtr, dwSpinCount: ULONG) -> ULONG extern def InitializeCriticalSectionAndSpinCount(lpCriticalSection: CRITICAL_SECTION | t.CPtr, dwSpinCount: ULONG) -> BOOL extern def CreateMutexA(lpMutexAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInitialOwner: BOOL, lpName: LPCSTR) -> HANDLE extern def CreateMutexW(lpMutexAttributes: SECURITY_ATTRIBUTES | t.CPtr, bInitialOwner: BOOL, lpName: LPCWSTR) -> HANDLE extern def OpenMutexA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE extern def OpenMutexW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE extern def ReleaseMutex(hMutex: HANDLE) -> BOOL extern def CreateEventA(lpEventAttributes: SECURITY_ATTRIBUTES | t.CPtr, bManualReset: BOOL, bInitialState: BOOL, lpName: LPCSTR) -> HANDLE extern def CreateEventW(lpEventAttributes: SECURITY_ATTRIBUTES | t.CPtr, bManualReset: BOOL, bInitialState: BOOL, lpName: LPCWSTR) -> HANDLE extern def OpenEventA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE extern def OpenEventW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE extern def SetEvent(hEvent: HANDLE) -> BOOL extern def ResetEvent(hEvent: HANDLE) -> BOOL extern def PulseEvent(hEvent: HANDLE) -> BOOL extern def CreateSemaphoreA(lpSemaphoreAttributes: SECURITY_ATTRIBUTES | t.CPtr, lInitialCount: LONG, lMaximumCount: LONG, lpName: LPCSTR) -> HANDLE extern def CreateSemaphoreW(lpSemaphoreAttributes: SECURITY_ATTRIBUTES | t.CPtr, lInitialCount: LONG, lMaximumCount: LONG, lpName: LPCWSTR) -> HANDLE extern def OpenSemaphoreA(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCSTR) -> HANDLE extern def OpenSemaphoreW(dwDesiredAccess: ULONG, bInheritHandle: BOOL, lpName: LPCWSTR) -> HANDLE extern def ReleaseSemaphore(hSemaphore: HANDLE, lReleaseCount: LONG, lpPreviousCount: LONG | t.CPtr) -> BOOL extern def WaitForSingleObject(hHandle: HANDLE, dwMilliseconds: ULONG) -> ULONG extern def WaitForSingleObjectEx(hHandle: HANDLE, dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG extern def WaitForMultipleObjects(nCount: ULONG, lpHandles: VOIDPTR, bWaitAll: BOOL, dwMilliseconds: ULONG) -> ULONG extern def WaitForMultipleObjectsEx(nCount: ULONG, lpHandles: VOIDPTR, bWaitAll: BOOL, dwMilliseconds: ULONG, bAlertable: BOOL) -> ULONG extern def InitializeSRWLock(SRWLock: VOIDPTR) -> VOID extern def AcquireSRWLockExclusive(SRWLock: VOIDPTR) -> VOID extern def AcquireSRWLockShared(SRWLock: VOIDPTR) -> VOID extern def ReleaseSRWLockExclusive(SRWLock: VOIDPTR) -> VOID extern def ReleaseSRWLockShared(SRWLock: VOIDPTR) -> VOID # 条件变量 (Condition Variables) - Vista+ CONDITION_VARIABLE_LOCKMODE_SHARED: t.CDefine = 0x1 extern def InitializeConditionVariable(ConditionVariable: VOIDPTR) -> VOID extern def SleepConditionVariableCS(ConditionVariable: VOIDPTR, CriticalSection: CRITICAL_SECTION | t.CPtr, dwMilliseconds: ULONG) -> BOOL extern def SleepConditionVariableSRW(ConditionVariable: VOIDPTR, SRWLock: VOIDPTR, dwMilliseconds: ULONG, Flags: ULONG) -> BOOL extern def WakeConditionVariable(ConditionVariable: VOIDPTR) -> VOID extern def WakeAllConditionVariable(ConditionVariable: VOIDPTR) -> VOID # 一次性初始化 (One-Time Initialization) - Vista+ INIT_ONCE_STATIC_INIT: t.CDefine = 0x00000001 INIT_ONCE_CHECK_ONLY: t.CDefine = 0x00000002 INIT_ONCE_ASYNC: t.CDefine = 0x00000004 INIT_ONCE_INIT_FAILED: t.CDefine = 0x00000008 class INIT_ONCE: Ptr: t.CPtr extern def InitOnceExecuteOnce(InitOnce: INIT_ONCE | t.CPtr, InitFn: VOIDPTR, Parameter: VOIDPTR, Context: VOIDPTR | t.CPtr) -> BOOL