This commit is contained in:
44
win32/Condition.c
Normal file
44
win32/Condition.c
Normal file
@@ -0,0 +1,44 @@
|
||||
#include "Internal.h"
|
||||
#include "Codemap.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
CgeCondition *CgeConditionNew(int *result) {
|
||||
CgeCondition *condition;
|
||||
|
||||
if ((condition = malloc(sizeof(CgeCondition)))) {
|
||||
InitializeConditionVariable(&condition->handle);
|
||||
}
|
||||
|
||||
return condition;
|
||||
}
|
||||
|
||||
void CgeConditionFree(CgeCondition *condition) {
|
||||
free(condition);
|
||||
}
|
||||
|
||||
int CgeConditionWait(CgeCondition *condition, CgeMutex *mutex, int *result) {
|
||||
return CgeConditionWaitFor(condition, mutex, INFINITE, result);
|
||||
}
|
||||
|
||||
int CgeConditionWaitFor(CgeCondition *condition, CgeMutex *mutex,
|
||||
uint32_t timeout, int *result) {
|
||||
if (SleepConditionVariableCS(&condition->handle, &mutex->handle, timeout))
|
||||
return 1;
|
||||
|
||||
if (result)
|
||||
*result = errorToErrorCode(GetLastError());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CgeConditionSignal(CgeCondition *condition, int *result) {
|
||||
(void)result;
|
||||
WakeConditionVariable(&condition->handle);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int CgeConditionBroadcast(CgeCondition *condition, int *result) {
|
||||
(void)result;
|
||||
WakeAllConditionVariable(&condition->handle);
|
||||
return 1;
|
||||
}
|
||||
Reference in New Issue
Block a user