30typedef struct TaskQueue TaskQueue;
31typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
32typedef struct TQWorker TQWorker;
33typedef struct TQWorker_WeakRef TQWorker_WeakRef;
35typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
37typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
39typedef struct TRGate_WeakRef TRGate_WeakRef;
40typedef struct ComplexTaskQueue ComplexTaskQueue;
41typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
44typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
52#define ctaskDependOn(task, dep) ctaskRequireTask(task, dep, false)
56#define ctaskWaitFor(task, dep) ctaskRequireTask(task, dep, true)
60#define ctaskDependOnTimeout(task, dep, timeout) ctaskRequireTaskTimeout(task, dep, false, timeout)
64#define ctaskWaitForTimeout(task, dep, timeout) ctaskRequireTaskTimeout(task, dep, true, timeout)
71 TASK_Result_Complex_Count
86typedef struct ComplexTask_ClassIf {
91 uint32 (*run)(_In_
void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker, _Inout_
TaskControl* tcon);
92 void (*runCancelled)(_In_
void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker);
93 bool (*cancel)(_In_
void* self);
94 bool (*reset)(_In_
void* self);
95 bool (*wait)(_In_
void* self, int64 timeout);
96 intptr (*cmp)(_In_
void* self,
void* other, uint32 flags);
97 uint32 (*hash)(_In_
void* self, uint32 flags);
99extern ComplexTask_ClassIf ComplexTask_ClassIf_tmpl;
104 ComplexTask_ClassIf* _;
105 void* _is_ComplexTask;
111 atomic(uintptr) _ref;
112 atomic(ptr) _weakref;
127#define ComplexTask(inst) ((ComplexTask*)(unused_noeval((inst) && &((inst)->_is_ComplexTask)), (inst)))
128#define ComplexTaskNone ((ComplexTask*)NULL)
130typedef struct ComplexTask_WeakRef {
133 void* _is_ComplexTask_WeakRef;
134 void* _is_Task_WeakRef;
135 void* _is_BasicTask_WeakRef;
136 void* _is_ObjInst_WeakRef;
138 atomic(uintptr) _ref;
140} ComplexTask_WeakRef;
141#define ComplexTask_WeakRef(inst) ((ComplexTask_WeakRef*)(unused_noeval((inst) && &((inst)->_is_ComplexTask_WeakRef)), (inst)))
143void ComplexTask_requireTask(_In_
ComplexTask* self, _In_
Task* dep,
bool failok);
149#define ctaskRequireTask(self, dep, failok) ComplexTask_requireTask(ComplexTask(self), Task(dep), failok)
151void ComplexTask_requireTaskTimeout(_In_
ComplexTask* self, _In_
Task* dep,
bool failok, int64 timeout);
158#define ctaskRequireTaskTimeout(self, dep, failok, timeout) ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout)
165#define ctaskRequireResource(self, res) ComplexTask_requireResource(ComplexTask(self), TaskResource(res))
173#define ctaskRequireResourceTimeout(self, res, timeout) ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout)
180#define ctaskRequireGate(self, gate) ComplexTask_requireGate(ComplexTask(self), TRGate(gate))
182void ComplexTask_requireGateTimeout(_In_
ComplexTask* self, _In_
TRGate* gate, int64 timeout);
188#define ctaskRequireGateTimeout(self, gate, timeout) ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout)
195#define ctaskRequire(self, req) ComplexTask_require(ComplexTask(self), TaskRequires(req))
202#define ctaskAdvance(self) ComplexTask_advance(ComplexTask(self))
204uint32 ComplexTask_checkRequires(_In_
ComplexTask* self,
bool updateProgress, _Out_opt_ int64* expires);
211#define ctaskCheckRequires(self, updateProgress, expires) ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires)
213void ComplexTask_cancelRequires(_In_
ComplexTask* self);
217#define ctaskCancelRequires(self) ComplexTask_cancelRequires(ComplexTask(self))
219bool ComplexTask_acquireRequires(_In_
ComplexTask* self, sa_TaskRequires* acquired);
225#define ctaskAcquireRequires(self, acquired) ComplexTask_acquireRequires(ComplexTask(self), acquired)
227bool ComplexTask_releaseRequires(_In_
ComplexTask* self, sa_TaskRequires resources);
233#define ctaskReleaseRequires(self, resources) ComplexTask_releaseRequires(ComplexTask(self), resources)
242#define ctaskAdvanceCallback(cvars, args) ComplexTask_advanceCallback(cvars, args)
245#define ctask_setState(self, newstate) BasicTask__setState(BasicTask(self), newstate)
258#define ctaskRun(self, tq, worker, tcon) (self)->_->run(ComplexTask(self), TaskQueue(tq), TQWorker(worker), tcon)
264#define ctaskRunCancelled(self, tq, worker) (self)->_->runCancelled(ComplexTask(self), TaskQueue(tq), TQWorker(worker))
266#define ctaskCancel(self) (self)->_->cancel(ComplexTask(self))
268#define ctaskReset(self) (self)->_->reset(ComplexTask(self))
274#define ctaskWait(self, timeout) (self)->_->wait(ComplexTask(self), timeout)
276#define ctaskCmp(self, other, flags) (self)->_->cmp(ComplexTask(self), other, flags)
278#define ctaskHash(self, flags) (self)->_->hash(ComplexTask(self), flags)
#define saDeclarePtr(name)
ComplexTaskRunResultEnum
Return values from ComplexTask::run() extending BasicTaskRunResultEnum.
ComplexTaskInternalFlagsEnum
Internal flags reserved for scheduler use.
ComplexTaskFlagsEnum
Flags controlling ComplexTask behavior.
@ TASK_Result_Schedule
Reschedule task to run after delay specified in TaskControl.delay.
@ TASK_Result_Schedule_Progress
Same as Schedule, but marks progress (prevents stall warnings)
@ TASK_Result_Defer
Defer task until manually advanced.
@ TASK_Result_Defer_Progress
Same as Defer, but marks progress.
@ TASK_INTERNAL_Owns_Resources
The task has acquired resources and needs to release them.
@ TASK_Cancel_Expired
Cancel dependencies that exceed their timeout.
@ TASK_Require_Failed
[Internal] Set when a soft requirement failed
@ TASK_Soft_Requires
Allow task to run even if some dependencies fail.
@ TASK_Cancel_Cascade
Cancel dependencies when this task is cancelled.
@ TASK_Retain_Requires
Keep acquired resources across schedule/defer cycles.
CX Object System - Object-oriented programming in C.
Reader-writer lock synchronization primitive.
Complex task with dependencies, scheduling, and resource management.
cchain oncomplete
Functions called when task completes (success or failure)
atomic(uint32) state
Current task state and flags.
string name
Task name shown in monitor output.
atomic(uint32) _advcount
Number of times task has been advanced.
sa_TaskRequires _requires
List of requirements (dependencies, resources, gates)
int64 lastprogress
Timestamp of last progress change.
int64 nextrun
Next scheduled run time.
Weak(ComplexTaskQueue) *lastq
Last queue this task ran on before being deferred.
uint16 flags
Task behavior flags (ComplexTaskFlagsEnum)
uint16 _intflags
Internal flags reserved for scheduler use.
int64 last
Last time this task was moved between queues and/or run.
One-time event gate for task synchronization.
Abstract base class for task requirements (dependencies, resources, gates).
Abstract base for shared resources with exclusive access.
Task with name, timing information, and completion callbacks.
Task object with name, timing, and completion callbacks.
Abstract base class for task requirements.
Abstract base class for shared resources.