mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2026-10-28 06:40:00 +00:00
Add condition variable support and reimplement PLT_EVENT with it for non-Win32 platforms
This commit is contained in:
1 parent
ccec4e8475
commit
61b4fc1fe7
2 files changed
+86
-72
No files matched your search
+19
-16
@@ -7,18 +7,14 @@ typedef void(*ThreadEntry)(void* context);
|
||||
|
||||
#if defined(LC_WINDOWS)
|
||||
typedef SRWLOCK PLT_MUTEX;
|
||||
typedef HANDLE PLT_EVENT;
|
||||
typedef CONDITION_VARIABLE PLT_COND;
|
||||
typedef struct _PLT_THREAD {
|
||||
HANDLE handle;
|
||||
bool cancelled;
|
||||
} PLT_THREAD;
|
||||
#elif defined(__vita__)
|
||||
typedef int PLT_MUTEX;
|
||||
typedef struct _PLT_EVENT {
|
||||
int mutex;
|
||||
int cond;
|
||||
bool signalled;
|
||||
} PLT_EVENT;
|
||||
typedef int PLT_COND;
|
||||
typedef struct _PLT_THREAD {
|
||||
int handle;
|
||||
int cancelled;
|
||||
@@ -27,22 +23,14 @@ typedef struct _PLT_THREAD {
|
||||
} PLT_THREAD;
|
||||
#elif defined(__WIIU__)
|
||||
typedef OSFastMutex PLT_MUTEX;
|
||||
typedef struct _PLT_EVENT {
|
||||
OSFastMutex mutex;
|
||||
OSFastCondition cond;
|
||||
int signalled;
|
||||
} PLT_EVENT;
|
||||
typedef OSFastCondition PLT_COND;
|
||||
typedef struct _PLT_THREAD {
|
||||
OSThread thread;
|
||||
int cancelled;
|
||||
} PLT_THREAD;
|
||||
#elif defined (LC_POSIX)
|
||||
typedef pthread_mutex_t PLT_MUTEX;
|
||||
typedef struct _PLT_EVENT {
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t cond;
|
||||
bool signalled;
|
||||
} PLT_EVENT;
|
||||
typedef pthread_cond_t PLT_COND;
|
||||
typedef struct _PLT_THREAD {
|
||||
pthread_t thread;
|
||||
bool cancelled;
|
||||
@@ -51,6 +39,16 @@ typedef struct _PLT_THREAD {
|
||||
#error Unsupported platform
|
||||
#endif
|
||||
|
||||
#ifdef LC_WINDOWS
|
||||
typedef HANDLE PLT_EVENT;
|
||||
#else
|
||||
typedef struct _PLT_EVENT {
|
||||
PLT_MUTEX mutex;
|
||||
PLT_COND cond;
|
||||
bool signalled;
|
||||
} PLT_EVENT;
|
||||
#endif
|
||||
|
||||
int PltCreateMutex(PLT_MUTEX* mutex);
|
||||
void PltDeleteMutex(PLT_MUTEX* mutex);
|
||||
void PltLockMutex(PLT_MUTEX* mutex);
|
||||
@@ -68,6 +66,11 @@ void PltSetEvent(PLT_EVENT* event);
|
||||
void PltClearEvent(PLT_EVENT* event);
|
||||
int PltWaitForEvent(PLT_EVENT* event);
|
||||
|
||||
int PltCreateConditionVariable(PLT_COND* cond, PLT_MUTEX* mutex);
|
||||
void PltDeleteConditionVariable(PLT_COND* cond);
|
||||
void PltSignalConditionVariable(PLT_COND* cond);
|
||||
void PltWaitForConditionVariable(PLT_COND* cond, PLT_MUTEX* mutex);
|
||||
|
||||
#define PLT_WAIT_SUCCESS 0
|
||||
#define PLT_WAIT_INTERRUPTED 1
|
||||
|
||||
|
||||
Reference in new issue
Block a user