mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-18 09:25:49 +00:00
Replace #ifdef _WIN32 with gates on our platforms definitions. Implement PltIsThreadInterrupted for POSIX. Fix PltWaitForEvent for POSIX.
This commit is contained in:
parent
8ad3145638
commit
f9882f91e1
@ -16,7 +16,7 @@ VOID WINAPI ApcFunc(ULONG_PTR parameter) {
|
|||||||
WCHAR DbgBuf[512];
|
WCHAR DbgBuf[512];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LC_WINDOWS
|
#if defined(LC_WINDOWS) || defined(LC_WINDOWS_PHONE)
|
||||||
DWORD WINAPI ThreadProc(LPVOID lpParameter) {
|
DWORD WINAPI ThreadProc(LPVOID lpParameter) {
|
||||||
struct thread_context *ctx = (struct thread_context *)lpParameter;
|
struct thread_context *ctx = (struct thread_context *)lpParameter;
|
||||||
|
|
||||||
@ -108,6 +108,9 @@ int PltIsThreadInterrupted(PLT_THREAD *thread) {
|
|||||||
#if defined(LC_WINDOWS) || defined(LC_WINDOWS_PHONE)
|
#if defined(LC_WINDOWS) || defined(LC_WINDOWS_PHONE)
|
||||||
return thread->cancelled;
|
return thread->cancelled;
|
||||||
#else
|
#else
|
||||||
|
// The thread will die here if a cancellation was requested
|
||||||
|
pthread_testcancel();
|
||||||
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +136,7 @@ int PltCreateThread(ThreadEntry entry, void* context, PLT_THREAD *thread) {
|
|||||||
ctx->entry = entry;
|
ctx->entry = entry;
|
||||||
ctx->context = context;
|
ctx->context = context;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#if defined(LC_WINDOWS) || defined(LC_WINDOWS_PHONE)
|
||||||
{
|
{
|
||||||
thread->cancelled = 0;
|
thread->cancelled = 0;
|
||||||
thread->handle = CreateThread(NULL, 0, ThreadProc, ctx, 0, NULL);
|
thread->handle = CreateThread(NULL, 0, ThreadProc, ctx, 0, NULL);
|
||||||
@ -174,7 +177,7 @@ int PltCreateEvent(PLT_EVENT *event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PltCloseEvent(PLT_EVENT *event) {
|
void PltCloseEvent(PLT_EVENT *event) {
|
||||||
#ifdef _WIN32
|
#if defined(LC_WINDOWS) || defined(LC_WINDOWS_PHONE)
|
||||||
CloseHandle(*event);
|
CloseHandle(*event);
|
||||||
#else
|
#else
|
||||||
pthread_mutex_destroy(&event->mutex);
|
pthread_mutex_destroy(&event->mutex);
|
||||||
@ -183,7 +186,7 @@ void PltCloseEvent(PLT_EVENT *event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PltSetEvent(PLT_EVENT *event) {
|
void PltSetEvent(PLT_EVENT *event) {
|
||||||
#ifdef _WIN32
|
#if defined(LC_WINDOWS) || defined(LC_WINDOWS_PHONE)
|
||||||
SetEvent(*event);
|
SetEvent(*event);
|
||||||
#else
|
#else
|
||||||
event->signalled = 1;
|
event->signalled = 1;
|
||||||
@ -192,7 +195,7 @@ void PltSetEvent(PLT_EVENT *event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PltClearEvent(PLT_EVENT *event) {
|
void PltClearEvent(PLT_EVENT *event) {
|
||||||
#ifdef _WIN32
|
#if defined(LC_WINDOWS) || defined(LC_WINDOWS_PHONE)
|
||||||
ResetEvent(*event);
|
ResetEvent(*event);
|
||||||
#else
|
#else
|
||||||
event->signalled = 0;
|
event->signalled = 0;
|
||||||
@ -200,7 +203,7 @@ void PltClearEvent(PLT_EVENT *event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int PltWaitForEvent(PLT_EVENT *event) {
|
int PltWaitForEvent(PLT_EVENT *event) {
|
||||||
#ifdef _WIN32
|
#if defined(LC_WINDOWS) || defined(LC_WINDOWS_PHONE)
|
||||||
DWORD error = WaitForSingleObjectEx(*event, INFINITE, TRUE);
|
DWORD error = WaitForSingleObjectEx(*event, INFINITE, TRUE);
|
||||||
if (error == STATUS_WAIT_0) {
|
if (error == STATUS_WAIT_0) {
|
||||||
return PLT_WAIT_SUCCESS;
|
return PLT_WAIT_SUCCESS;
|
||||||
@ -218,5 +221,6 @@ int PltWaitForEvent(PLT_EVENT *event) {
|
|||||||
pthread_cond_wait(&event->cond, &event->mutex);
|
pthread_cond_wait(&event->cond, &event->mutex);
|
||||||
}
|
}
|
||||||
pthread_mutex_unlock(&event->mutex);
|
pthread_mutex_unlock(&event->mutex);
|
||||||
|
return PLT_WAIT_SUCCESS;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user