33typedef struct TaskQueue TaskQueue;
34typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
35typedef struct TQWorker TQWorker;
36typedef struct TQWorker_WeakRef TQWorker_WeakRef;
38typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
40typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
42typedef struct TRGate_WeakRef TRGate_WeakRef;
43typedef struct ComplexTaskQueue ComplexTaskQueue;
44typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
47typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
50#define _sti_ComplexTask _sti_object
51#define SType_ComplexTask ComplexTask*
52#define STStorageType_ComplexTask ComplexTask*
53#define STypeArg_ComplexTask(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(ComplexTask, val))
54#define STypeArgPtr_ComplexTask(type, val) (stgeneric*)objInstCheckClassPtr(ComplexTask, val)
55#define STypeCheckedArg_ComplexTask(type, val) stType(type), stArg(type, val)
56#define STypeCheckedPtrArg_ComplexTask(type, val) stType(type), stArgPtr(type, val)
62#define ctaskDependOn(task, dep) ctaskRequireTask(task, dep, false)
66#define ctaskWaitFor(task, dep) ctaskRequireTask(task, dep, true)
70#define ctaskDependOnTimeout(task, dep, timeout) ctaskRequireTaskTimeout(task, dep, false, timeout)
74#define ctaskWaitForTimeout(task, dep, timeout) ctaskRequireTaskTimeout(task, dep, true, timeout)
81 TASK_Result_Complex_Count
96typedef struct ComplexTask_ClassIf {
101 uint32 (*run)(_In_
void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker, _Inout_
TaskControl* tcon);
102 void (*runCancelled)(_In_
void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker);
103 bool (*cancel)(_In_
void* self);
104 bool (*reset)(_In_
void* self);
105 bool (*wait)(_In_
void* self, int64 timeout);
106 intptr (*cmp)(_In_
void* self,
void* other, uint32 flags);
107 uint32 (*hash)(_In_
void* self, uint32 flags);
108} ComplexTask_ClassIf;
109extern ComplexTask_ClassIf ComplexTask_ClassIf_tmpl;
114 ComplexTask_ClassIf* _;
115 void* _is_ComplexTask;
121 atomic(uintptr) _ref;
122 atomic(ptr) _weakref;
141#define ComplexTask(inst) objInstCheckClass(ComplexTask, inst)
142#define ComplexTaskNone ((ComplexTask*)NULL)
144typedef struct ComplexTask_WeakRef {
147 void* _is_ComplexTask_WeakRef;
148 void* _is_Task_WeakRef;
149 void* _is_BasicTask_WeakRef;
150 void* _is_ObjInst_WeakRef;
152 atomic(uintptr) _ref;
154} ComplexTask_WeakRef;
155#define ComplexTask_WeakRef(inst) objWeakRefCheckClass(ComplexTask, inst)
157void ComplexTask_requireTask(_In_
ComplexTask* self, _In_
Task* dep,
bool failok);
163#define ctaskRequireTask(self, dep, failok) ComplexTask_requireTask(ComplexTask(self), Task(dep), failok)
165void ComplexTask_requireTaskTimeout(_In_
ComplexTask* self, _In_
Task* dep,
bool failok, int64 timeout);
172#define ctaskRequireTaskTimeout(self, dep, failok, timeout) ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout)
179#define ctaskRequireResource(self, res) ComplexTask_requireResource(ComplexTask(self), TaskResource(res))
187#define ctaskRequireResourceTimeout(self, res, timeout) ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout)
194#define ctaskRequireGate(self, gate) ComplexTask_requireGate(ComplexTask(self), TRGate(gate))
196void ComplexTask_requireGateTimeout(_In_
ComplexTask* self, _In_
TRGate* gate, int64 timeout);
202#define ctaskRequireGateTimeout(self, gate, timeout) ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout)
209#define ctaskRequire(self, req) ComplexTask_require(ComplexTask(self), TaskRequires(req))
216#define ctaskAdvance(self) ComplexTask_advance(ComplexTask(self))
218uint32 ComplexTask_checkRequires(_In_
ComplexTask* self,
bool updateProgress, _Out_opt_ int64* expires);
225#define ctaskCheckRequires(self, updateProgress, expires) ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires)
227void ComplexTask_cancelRequires(_In_
ComplexTask* self);
231#define ctaskCancelRequires(self) ComplexTask_cancelRequires(ComplexTask(self))
233bool ComplexTask_acquireRequires(_In_
ComplexTask* self, sa_TaskRequires* acquired);
239#define ctaskAcquireRequires(self, acquired) ComplexTask_acquireRequires(ComplexTask(self), acquired)
241bool ComplexTask_releaseRequires(_In_
ComplexTask* self, sa_TaskRequires resources);
247#define ctaskReleaseRequires(self, resources) ComplexTask_releaseRequires(ComplexTask(self), resources)
256#define ctaskAdvanceCallback(cvars, args) ComplexTask_advanceCallback(cvars, args)
259#define ctask_setState(self, newstate) BasicTask__setState(BasicTask(self), newstate)
272#define ctaskRun(self, tq, worker, tcon) (self)->_->run(ComplexTask(self), TaskQueue(tq), TQWorker(worker), tcon)
278#define ctaskRunCancelled(self, tq, worker) (self)->_->runCancelled(ComplexTask(self), TaskQueue(tq), TQWorker(worker))
280#define ctaskCancel(self) (self)->_->cancel(ComplexTask(self))
282#define ctaskReset(self) (self)->_->reset(ComplexTask(self))
288#define ctaskWait(self, timeout) (self)->_->wait(ComplexTask(self), timeout)
290#define ctaskCmp(self, other, flags) (self)->_->cmp(ComplexTask(self), other, flags)
292#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 Struct System - Introspectable, serializable POD structures in C.
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)
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.