3
0
mirror of https://github.com/XboxDev/nxdk.git synced 2026-04-02 21:33:44 +00:00
Files
nxdk/lib/winapi/synchapi.h
2024-09-11 06:17:06 +09:30

86 lines
3.7 KiB
C

// SPDX-License-Identifier: MIT
// SPDX-FileCopyrightText: 2019-2020 Stefan Schmidt
// SPDX-FileCopyrightText: 2020 Jannik Vogel
// SPDX-FileCopyrightText: 2022 Ryan Wendland
#ifndef __SYNCHAPI_H__
#define __SYNCHAPI_H__
#include <stdint.h>
#include <winbase.h>
#include <windef.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
typedef PRTL_CRITICAL_SECTION LPCRITICAL_SECTION;
typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION;
VOID InitializeCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
BOOL InitializeCriticalSectionAndSpinCount (LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount);
VOID DeleteCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
VOID EnterCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
BOOL TryEnterCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
VOID LeaveCriticalSection (LPCRITICAL_SECTION lpCriticalSection);
VOID InitializeConditionVariable (PCONDITION_VARIABLE ConditionVariable);
BOOL SleepConditionVariableCS (PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection, DWORD dwMilliseconds);
BOOL SleepConditionVariableSRW (PCONDITION_VARIABLE ConditionVariable, PSRWLOCK SRWLock, DWORD dwMilliseconds, ULONG Flags);
VOID WakeConditionVariable (PCONDITION_VARIABLE ConditionVariable);
VOID WakeAllConditionVariable (PCONDITION_VARIABLE ConditionVariable);
// UninitializeConditionVariable is an nxdk extension to free associated system resources
VOID UninitializeConditionVariable (PCONDITION_VARIABLE ConditionVariable);
void AcquireSRWLockExclusive (PSRWLOCK SRWLock);
void AcquireSRWLockShared (PSRWLOCK SRWLock);
void InitializeSRWLock (PSRWLOCK SRWLock);
void ReleaseSRWLockExclusive (PSRWLOCK SRWLock);
void ReleaseSRWLockShared (PSRWLOCK SRWLock);
BOOLEAN TryAcquireSRWLockExclusive (PSRWLOCK SRWLock);
BOOLEAN TryAcquireSRWLockShared (PSRWLOCK SRWLock);
BOOL InitOnceExecuteOnce (PINIT_ONCE InitOnce, PINIT_ONCE_FN InitFn, PVOID Context, LPVOID *Parameter);
BOOL InitOnceBeginInitialize (LPINIT_ONCE lpInitOnce, DWORD dwFlags, PBOOL fPending, LPVOID *lpContext);
BOOL InitOnceComplete (LPINIT_ONCE lpInitOnce, DWORD dwFlags, LPVOID lpContext);
#define WAIT_ABANDONED ((DWORD)0x00000080L) // same as STATUS_ABANDONED_WAIT_0
#define WAIT_IO_COMPLETION ((DWORD)0x000000C0L) // same as STATUS_USER_APC
#define WAIT_OBJECT_0 ((DWORD)0x00000000L) // same as STATUS_WAIT_0
#define WAIT_TIMEOUT ((DWORD)0x00000102L) // same as STATUS_TIMEOUT
#define WAIT_FAILED ((DWORD)0xFFFFFFFFL)
VOID Sleep (DWORD dwMilliseconds);
DWORD SleepEx (DWORD dwMilliseconds, BOOL bAlertable);
DWORD WaitForSingleObjectEx (HANDLE hHandle, DWORD dwMilliseconds, BOOL bAlertable);
DWORD WaitForSingleObject (HANDLE hHandle, DWORD dwMilliseconds);
DWORD WaitForMultipleObjectsEx (DWORD nCount, const HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds, BOOL bAlertable);
DWORD WaitForMultipleObjects (DWORD nCount, const HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds);
HANDLE CreateSemaphore (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName);
BOOL ReleaseSemaphore (HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);
HANDLE CreateMutexA (LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName);
BOOL ReleaseMutex (HANDLE hMutex);
HANDLE CreateEventA (LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName);
BOOL SetEvent (HANDLE hEvent);
BOOL ResetEvent (HANDLE hEvent);
BOOL PulseEvent (HANDLE hEvent);
#ifndef UNICODE
#define CreateMutex CreateMutexA
#define CreateEvent CreateEventA
#else
#error nxdk does not support the Unicode API
#endif
#ifdef __cplusplus
}
#endif
#endif