Home | History | Annotate | Download | only in include
      1 /**
      2  * This file is part of the mingw-w64 runtime package.
      3  * No warranty is given; refer to the file DISCLAIMER within this package.
      4  */
      5 #ifndef _SYNCHAPI_H_
      6 #define _SYNCHAPI_H_
      7 
      8 #include <apiset.h>
      9 #include <apisetcconv.h>
     10 #include <minwindef.h>
     11 #include <minwinbase.h>
     12 
     13 #ifdef __cplusplus
     14 extern "C" {
     15 #endif
     16 
     17 #define SRWLOCK_INIT RTL_SRWLOCK_INIT
     18 
     19 #define INIT_ONCE_STATIC_INIT RTL_RUN_ONCE_INIT
     20 
     21 #define INIT_ONCE_CHECK_ONLY RTL_RUN_ONCE_CHECK_ONLY
     22 #define INIT_ONCE_ASYNC RTL_RUN_ONCE_ASYNC
     23 #define INIT_ONCE_INIT_FAILED RTL_RUN_ONCE_INIT_FAILED
     24 
     25 #define INIT_ONCE_CTX_RESERVED_BITS RTL_RUN_ONCE_CTX_RESERVED_BITS
     26 
     27 #define CONDITION_VARIABLE_INIT RTL_CONDITION_VARIABLE_INIT
     28 
     29 #define CONDITION_VARIABLE_LOCKMODE_SHARED RTL_CONDITION_VARIABLE_LOCKMODE_SHARED
     30 
     31 #define MUTEX_MODIFY_STATE MUTANT_QUERY_STATE
     32 #define MUTEX_ALL_ACCESS MUTANT_ALL_ACCESS
     33 
     34   typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK;
     35 
     36   typedef RTL_RUN_ONCE INIT_ONCE;
     37   typedef PRTL_RUN_ONCE PINIT_ONCE;
     38   typedef PRTL_RUN_ONCE LPINIT_ONCE;
     39 
     40   typedef WINBOOL (WINAPI *PINIT_ONCE_FN) (PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context);
     41   typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;
     42 
     43   WINBASEAPI VOID WINAPI EnterCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
     44   WINBASEAPI VOID WINAPI LeaveCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
     45   WINBASEAPI WINBOOL WINAPI TryEnterCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
     46   WINBASEAPI VOID WINAPI DeleteCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
     47   WINBASEAPI WINBOOL WINAPI SetEvent (HANDLE hEvent);
     48   WINBASEAPI WINBOOL WINAPI ResetEvent (HANDLE hEvent);
     49   WINBASEAPI WINBOOL WINAPI ReleaseSemaphore (HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);
     50   WINBASEAPI WINBOOL WINAPI ReleaseMutex (HANDLE hMutex);
     51   WINBASEAPI DWORD WINAPI WaitForSingleObjectEx (HANDLE hHandle, DWORD dwMilliseconds, WINBOOL bAlertable);
     52   WINBASEAPI DWORD WINAPI WaitForMultipleObjectsEx (DWORD nCount, CONST HANDLE *lpHandles, WINBOOL bWaitAll, DWORD dwMilliseconds, WINBOOL bAlertable);
     53   WINBASEAPI HANDLE WINAPI OpenMutexW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpName);
     54   WINBASEAPI HANDLE WINAPI OpenEventA (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCSTR lpName);
     55   WINBASEAPI HANDLE WINAPI OpenEventW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpName);
     56   WINBASEAPI HANDLE WINAPI OpenSemaphoreW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpName);
     57   WINBOOL WINAPI WaitOnAddress (volatile VOID *Address, PVOID CompareAddress, SIZE_T AddressSize, DWORD dwMilliseconds);
     58   VOID WINAPI WakeByAddressSingle (PVOID Address);
     59   VOID WINAPI WakeByAddressAll (PVOID Address);
     60 #if _WIN32_WINNT >= 0x0600
     61 #define CREATE_MUTEX_INITIAL_OWNER 0x1
     62 
     63 #define CREATE_EVENT_MANUAL_RESET 0x1
     64 #define CREATE_EVENT_INITIAL_SET 0x2
     65 
     66   WINBASEAPI VOID WINAPI InitializeSRWLock (PSRWLOCK SRWLock);
     67   VOID WINAPI ReleaseSRWLockExclusive (PSRWLOCK SRWLock);
     68   VOID WINAPI ReleaseSRWLockShared (PSRWLOCK SRWLock);
     69   VOID WINAPI AcquireSRWLockExclusive (PSRWLOCK SRWLock);
     70   VOID WINAPI AcquireSRWLockShared (PSRWLOCK SRWLock);
     71   WINBASEAPI BOOLEAN WINAPI TryAcquireSRWLockExclusive (PSRWLOCK SRWLock);
     72   WINBASEAPI BOOLEAN WINAPI TryAcquireSRWLockShared (PSRWLOCK SRWLock);
     73   WINBASEAPI WINBOOL WINAPI InitializeCriticalSectionEx (LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD Flags);
     74   WINBASEAPI VOID WINAPI InitOnceInitialize (PINIT_ONCE InitOnce);
     75   WINBASEAPI WINBOOL WINAPI InitOnceExecuteOnce (PINIT_ONCE InitOnce, PINIT_ONCE_FN InitFn, PVOID Parameter, LPVOID *Context);
     76   WINBASEAPI WINBOOL WINAPI InitOnceBeginInitialize (LPINIT_ONCE lpInitOnce, DWORD dwFlags, PBOOL fPending, LPVOID *lpContext);
     77   WINBASEAPI WINBOOL WINAPI InitOnceComplete (LPINIT_ONCE lpInitOnce, DWORD dwFlags, LPVOID lpContext);
     78   WINBASEAPI VOID WINAPI InitializeConditionVariable (PCONDITION_VARIABLE ConditionVariable);
     79   WINBASEAPI VOID WINAPI WakeConditionVariable (PCONDITION_VARIABLE ConditionVariable);
     80   WINBASEAPI VOID WINAPI WakeAllConditionVariable (PCONDITION_VARIABLE ConditionVariable);
     81   WINBASEAPI WINBOOL WINAPI SleepConditionVariableCS (PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection, DWORD dwMilliseconds);
     82   WINBASEAPI WINBOOL WINAPI SleepConditionVariableSRW (PCONDITION_VARIABLE ConditionVariable, PSRWLOCK SRWLock, DWORD dwMilliseconds, ULONG Flags);
     83   WINBASEAPI HANDLE WINAPI CreateMutexExA (LPSECURITY_ATTRIBUTES lpMutexAttributes, LPCSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess);
     84   WINBASEAPI HANDLE WINAPI CreateMutexExW (LPSECURITY_ATTRIBUTES lpMutexAttributes, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess);
     85   WINBASEAPI HANDLE WINAPI CreateEventExA (LPSECURITY_ATTRIBUTES lpEventAttributes, LPCSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess);
     86   WINBASEAPI HANDLE WINAPI CreateEventExW (LPSECURITY_ATTRIBUTES lpEventAttributes, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess);
     87   WINBASEAPI HANDLE WINAPI CreateSemaphoreExW (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess);
     88 
     89 #define CreateMutexEx __MINGW_NAME_AW(CreateMutexEx)
     90 #define CreateEventEx __MINGW_NAME_AW(CreateEventEx)
     91 #ifdef UNICODE
     92 #define CreateSemaphoreEx CreateSemaphoreExW
     93 #endif
     94 #endif
     95 
     96 #ifdef UNICODE
     97 #define OpenMutex OpenMutexW
     98 #define OpenSemaphore OpenSemaphoreW
     99 #endif
    100 #define OpenEvent __MINGW_NAME_AW(OpenEvent)
    101 
    102   typedef VOID (APIENTRY *PTIMERAPCROUTINE) (LPVOID lpArgToCompletionRoutine, DWORD dwTimerLowValue, DWORD dwTimerHighValue);
    103 
    104   typedef RTL_BARRIER SYNCHRONIZATION_BARRIER;
    105   typedef PRTL_BARRIER PSYNCHRONIZATION_BARRIER;
    106   typedef PRTL_BARRIER LPSYNCHRONIZATION_BARRIER;
    107 
    108 #define SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY 0x01
    109 #define SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY 0x02
    110 #define SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE 0x04
    111 
    112   WINBASEAPI VOID WINAPI InitializeCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
    113   WINBASEAPI WINBOOL WINAPI InitializeCriticalSectionAndSpinCount (LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount);
    114   WINBASEAPI DWORD WINAPI SetCriticalSectionSpinCount (LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount);
    115   WINBASEAPI DWORD WINAPI WaitForSingleObject (HANDLE hHandle, DWORD dwMilliseconds);
    116   WINBASEAPI DWORD WINAPI SleepEx (DWORD dwMilliseconds, WINBOOL bAlertable);
    117   WINBASEAPI HANDLE WINAPI CreateMutexA (LPSECURITY_ATTRIBUTES lpMutexAttributes, WINBOOL bInitialOwner, LPCSTR lpName);
    118   WINBASEAPI HANDLE WINAPI CreateMutexW (LPSECURITY_ATTRIBUTES lpMutexAttributes, WINBOOL bInitialOwner, LPCWSTR lpName);
    119   WINBASEAPI HANDLE WINAPI CreateEventA (LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualReset, WINBOOL bInitialState, LPCSTR lpName);
    120   WINBASEAPI HANDLE WINAPI CreateEventW (LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualReset, WINBOOL bInitialState, LPCWSTR lpName);
    121   WINBASEAPI WINBOOL WINAPI SetWaitableTimer (HANDLE hTimer, const LARGE_INTEGER *lpDueTime, LONG lPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, WINBOOL fResume);
    122   WINBASEAPI WINBOOL WINAPI CancelWaitableTimer (HANDLE hTimer);
    123   WINBASEAPI HANDLE WINAPI OpenWaitableTimerW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpTimerName);
    124   WINBOOL WINAPI EnterSynchronizationBarrier (LPSYNCHRONIZATION_BARRIER lpBarrier, DWORD dwFlags);
    125   WINBOOL WINAPI InitializeSynchronizationBarrier (LPSYNCHRONIZATION_BARRIER lpBarrier, LONG lTotalThreads, LONG lSpinCount);
    126   WINBOOL WINAPI DeleteSynchronizationBarrier (LPSYNCHRONIZATION_BARRIER lpBarrier);
    127   WINBASEAPI VOID WINAPI Sleep (DWORD dwMilliseconds);
    128   WINBASEAPI DWORD WINAPI SignalObjectAndWait (HANDLE hObjectToSignal, HANDLE hObjectToWaitOn, DWORD dwMilliseconds, WINBOOL bAlertable);
    129 #if _WIN32_WINNT >= 0x0600
    130 #define CREATE_WAITABLE_TIMER_MANUAL_RESET 0x1
    131   WINBASEAPI HANDLE WINAPI CreateWaitableTimerExW (LPSECURITY_ATTRIBUTES lpTimerAttributes, LPCWSTR lpTimerName, DWORD dwFlags, DWORD dwDesiredAccess);
    132 
    133 #ifdef UNICODE
    134 #define CreateWaitableTimerEx CreateWaitableTimerExW
    135 #endif
    136 #endif
    137 
    138 #if _WIN32_WINNT >= 0x0601
    139   WINBOOL WINAPI SetWaitableTimerEx (HANDLE hTimer, const LARGE_INTEGER *lpDueTime, LONG lPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, PREASON_CONTEXT WakeContext, ULONG TolerableDelay);
    140 #endif
    141 
    142 #define CreateMutex __MINGW_NAME_AW(CreateMutex)
    143 #define CreateEvent __MINGW_NAME_AW(CreateEvent)
    144 
    145 #ifdef UNICODE
    146 #define OpenWaitableTimer OpenWaitableTimerW
    147 #endif
    148 
    149 #ifdef __cplusplus
    150 }
    151 #endif
    152 #endif
    153