diff options
Diffstat (limited to 'src/Platform/Win32/Condition.c')
| -rw-r--r-- | src/Platform/Win32/Condition.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/Platform/Win32/Condition.c b/src/Platform/Win32/Condition.c new file mode 100644 index 0000000..1d2bcac --- /dev/null +++ b/src/Platform/Win32/Condition.c @@ -0,0 +1,58 @@ +#include "Thread.h" + +#include <BH/Thread.h> + + +BH_Condition *BH_ConditionNew(void) +{ + BH_Condition *condition; + + /* Allocate space for mutex and initialize it */ + condition = malloc(sizeof(BH_Condition)); + if (condition) + { + InitializeConditionVariable(&condition->handle); + } + + return condition; +} + + +void BH_ConditionFree(BH_Condition *condition) +{ + BH_UNUSED(condition); +} + + +int BH_ConditionWait(BH_Condition *condition, + BH_Mutex *mutex) +{ + return BH_ConditionWaitFor(condition, mutex, INFINITE); +} + + +int BH_ConditionWaitFor(BH_Condition *condition, + BH_Mutex *mutex, + uint32_t timeout) +{ + switch (SleepConditionVariableCS(&condition->handle, &mutex->handle, timeout)) + { + case 0: return BH_ERROR; + case ERROR_TIMEOUT: return BH_TIMEOUT; + default: return BH_OK; + } +} + + +int BH_ConditionSignal(BH_Condition *condition) +{ + WakeConditionVariable(&condition->handle); + return BH_OK; +} + + +int BH_ConditionBroadcast(BH_Condition *condition) +{ + WakeAllConditionVariable(&condition->handle); + return BH_OK; +} |
