Files
CgeThread/win32/Condition.c

45 lines
1.1 KiB
C
Raw Normal View History

2026-08-09 12:55:16 +03:00
#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;
}