Files
CgeThread/win32/Condition.c

50 lines
1.2 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;
2026-08-09 16:17:07 +03:00
int code = CGE_THREAD_EOOM;
2026-08-09 12:55:16 +03:00
if ((condition = malloc(sizeof(CgeCondition)))) {
InitializeConditionVariable(&condition->handle);
2026-08-09 16:17:07 +03:00
code = CGE_THREAD_EOK;
2026-08-09 12:55:16 +03:00
}
2026-08-09 16:17:07 +03:00
if (result)
*result = code;
2026-08-09 12:55:16 +03:00
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;
}