diff options
author | David Robillard <d@drobilla.net> | 2012-02-01 01:40:05 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-02-01 01:40:05 +0000 |
commit | 5d071ef1c9ea2d39c03ca64b6a0c3bb9c67bd8cf (patch) | |
tree | 6b2d088aef4ed5099fbbc140c594a0ee1b7e67fa /zix/sem.h | |
parent | dc7628a8eec281add045eb123ae06dbc94c1b950 (diff) | |
download | zix-5d071ef1c9ea2d39c03ca64b6a0c3bb9c67bd8cf.tar.gz zix-5d071ef1c9ea2d39c03ca64b6a0c3bb9c67bd8cf.tar.bz2 zix-5d071ef1c9ea2d39c03ca64b6a0c3bb9c67bd8cf.zip |
Windows portability fixes.
git-svn-id: http://svn.drobilla.net/zix/trunk@58 df6676b4-ccc9-40e5-b5d6-7c4628a128e3
Diffstat (limited to 'zix/sem.h')
-rw-r--r-- | zix/sem.h | 43 |
1 files changed, 40 insertions, 3 deletions
@@ -17,10 +17,10 @@ #ifndef ZIX_SEM_H #define ZIX_SEM_H -#include <stdbool.h> - #ifdef __APPLE__ # include <mach/mach.h> +#elif defined(_WIN32) +# include <windows.h> #else # include <semaphore.h> #endif @@ -129,7 +129,44 @@ zix_sem_try_wait(ZixSem* sem) return semaphore_timedwait(sem->sem, zero) == KERN_SUCCESS; } -#else /* !defined(__APPLE__) */ +#elif defined(_WIN32) + +struct ZixSemImpl { + HANDLE sem; +}; + +static inline ZixStatus +zix_sem_init(ZixSem* sem, unsigned initial) +{ + sem->sem = CreateSemaphore(NULL, initial, LONG_MAX, NULL); + return (sem->sem) ? ZIX_STATUS_ERROR : ZIX_STATUS_SUCCESS; +} + +static inline void +zix_sem_destroy(ZixSem* sem) +{ + CloseHandle(sem->sem); +} + +static inline void +zix_sem_post(ZixSem* sem) +{ + ReleaseSemaphore(sem->sem, 1, NULL); +} + +static inline void +zix_sem_wait(ZixSem* sem) +{ + WaitForSingleObject(sem->sem, INFINITE); +} + +static inline bool +zix_sem_try_wait(ZixSem* sem) +{ + WaitForSingleObject(sem->sem, 0); +} + +#else /* !defined(__APPLE__) && !defined(_WIN32) */ struct ZixSemImpl { sem_t sem; |