45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
|
|
#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;
|
||
|
|
}
|