From d07c2a56192300acb03408d227449a001eefdede Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 7 Feb 2016 15:41:32 +0200 Subject: [PATCH] Added uae_sem_trywait_delay() --- od-win32/posixemu.cpp | 12 +++++++++++- od-win32/threaddep/thread.h | 21 +++++++++++---------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/od-win32/posixemu.cpp b/od-win32/posixemu.cpp index 30163179..3129a03e 100644 --- a/od-win32/posixemu.cpp +++ b/od-win32/posixemu.cpp @@ -115,9 +115,19 @@ void uae_sem_post (uae_sem_t * event) SetEvent (*event); } +int uae_sem_trywait_delay(uae_sem_t * event, int millis) +{ + int v = WaitForSingleObject(*event, millis); + if (v == WAIT_OBJECT_0) + return 0; + if (v == WAIT_ABANDONED) + return -2; + return -1; +} + int uae_sem_trywait (uae_sem_t * event) { - return WaitForSingleObject (*event, 0) == WAIT_OBJECT_0 ? 0 : -1; + return uae_sem_trywait_delay(event, 0); } void uae_sem_destroy (uae_sem_t * event) diff --git a/od-win32/threaddep/thread.h b/od-win32/threaddep/thread.h index 06a26247..545df235 100644 --- a/od-win32/threaddep/thread.h +++ b/od-win32/threaddep/thread.h @@ -1,19 +1,20 @@ typedef HANDLE uae_sem_t; typedef HANDLE uae_thread_id; -extern void uae_sem_destroy (uae_sem_t*); -extern int uae_sem_trywait (uae_sem_t*); -extern void uae_sem_post (uae_sem_t*); -extern void uae_sem_wait (uae_sem_t*t); -extern void uae_sem_init (uae_sem_t*, int manual_reset, int initial_state); -extern int uae_start_thread (const TCHAR *name, void *(*f)(void *), void *arg, uae_thread_id *thread); -extern int uae_start_thread_fast (void *(*f)(void *), void *arg, uae_thread_id *thread); -extern void uae_end_thread (uae_thread_id *thread); -extern void uae_set_thread_priority (uae_thread_id *, int); +extern void uae_sem_destroy(uae_sem_t*); +extern int uae_sem_trywait(uae_sem_t*); +extern int uae_sem_trywait_delay(uae_sem_t*, int); +extern void uae_sem_post(uae_sem_t*); +extern void uae_sem_wait(uae_sem_t*t); +extern void uae_sem_init(uae_sem_t*, int manual_reset, int initial_state); +extern int uae_start_thread(const TCHAR *name, void *(*f)(void *), void *arg, uae_thread_id *thread); +extern int uae_start_thread_fast(void *(*f)(void *), void *arg, uae_thread_id *thread); +extern void uae_end_thread(uae_thread_id *thread); +extern void uae_set_thread_priority(uae_thread_id *, int); #include "commpipe.h" -STATIC_INLINE void uae_wait_thread (uae_thread_id tid) +STATIC_INLINE void uae_wait_thread(uae_thread_id tid) { WaitForSingleObject (tid, INFINITE); CloseHandle (tid); -- 2.47.3