52typedef struct TaskQueue TaskQueue;
53typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
54typedef struct TQWorker TQWorker;
55typedef struct TQWorker_WeakRef TQWorker_WeakRef;
57typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
59typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
61typedef struct TRGate_WeakRef TRGate_WeakRef;
62typedef struct ComplexTaskQueue ComplexTaskQueue;
63typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
66typedef struct MultiphaseTask_WeakRef MultiphaseTask_WeakRef;
69#define _sti_MultiphaseTask _sti_object
70#define SType_MultiphaseTask MultiphaseTask*
71#define STStorageType_MultiphaseTask MultiphaseTask*
72#define STypeArg_MultiphaseTask(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(MultiphaseTask, val))
73#define STypeArgPtr_MultiphaseTask(type, val) (stgeneric*)objInstCheckClassPtr(MultiphaseTask, val)
74#define STypeCheckedArg_MultiphaseTask(type, val) stType(type), stArg(type, val)
75#define STypeCheckedPtrArg_MultiphaseTask(type, val) stType(type), stArgPtr(type, val)
93#define mptaskAddPhases(self, parr) mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), false)
98#define mptaskAddFailPhases(self, parr) mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), true)
100typedef struct MultiphaseTask_ClassIf {
105 uint32 (*run)(_In_
void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker, _Inout_
TaskControl* tcon);
106 void (*runCancelled)(_In_
void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker);
107 bool (*cancel)(_In_
void* self);
108 bool (*reset)(_In_
void* self);
109 bool (*wait)(_In_
void* self, int64 timeout);
110 intptr (*cmp)(_In_
void* self,
void* other, uint32 flags);
111 uint32 (*hash)(_In_
void* self, uint32 flags);
112 uint32 (*finish)(_In_
void* self, uint32 result,
TaskControl* tcon);
113} MultiphaseTask_ClassIf;
114extern MultiphaseTask_ClassIf MultiphaseTask_ClassIf_tmpl;
119 MultiphaseTask_ClassIf* _;
120 void* _is_MultiphaseTask;
121 void* _is_ComplexTask;
127 atomic(uintptr) _ref;
128 atomic(ptr) _weakref;
151#define MultiphaseTask(inst) objInstCheckClass(MultiphaseTask, inst)
152#define MultiphaseTaskNone ((MultiphaseTask*)NULL)
154typedef struct MultiphaseTask_WeakRef {
157 void* _is_MultiphaseTask_WeakRef;
158 void* _is_ComplexTask_WeakRef;
159 void* _is_Task_WeakRef;
160 void* _is_BasicTask_WeakRef;
161 void* _is_ObjInst_WeakRef;
163 atomic(uintptr) _ref;
165} MultiphaseTask_WeakRef;
166#define MultiphaseTask_WeakRef(inst) objWeakRefCheckClass(MultiphaseTask, inst)
176#define mptask_addPhases(self, num, parr, fail) MultiphaseTask__addPhases(MultiphaseTask(self), num, parr, fail)
183#define mptaskRequireTask(self, dep, failok) ComplexTask_requireTask(ComplexTask(self), Task(dep), failok)
191#define mptaskRequireTaskTimeout(self, dep, failok, timeout) ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout)
197#define mptaskRequireResource(self, res) ComplexTask_requireResource(ComplexTask(self), TaskResource(res))
204#define mptaskRequireResourceTimeout(self, res, timeout) ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout)
210#define mptaskRequireGate(self, gate) ComplexTask_requireGate(ComplexTask(self), TRGate(gate))
217#define mptaskRequireGateTimeout(self, gate, timeout) ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout)
223#define mptaskRequire(self, req) ComplexTask_require(ComplexTask(self), TaskRequires(req))
229#define mptaskAdvance(self) ComplexTask_advance(ComplexTask(self))
237#define mptaskCheckRequires(self, updateProgress, expires) ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires)
242#define mptaskCancelRequires(self) ComplexTask_cancelRequires(ComplexTask(self))
249#define mptaskAcquireRequires(self, acquired) ComplexTask_acquireRequires(ComplexTask(self), acquired)
256#define mptaskReleaseRequires(self, resources) ComplexTask_releaseRequires(ComplexTask(self), resources)
259#define mptask_setState(self, newstate) BasicTask__setState(BasicTask(self), newstate)
262#define mptaskRun(self, tq, worker, tcon) (self)->_->run(MultiphaseTask(self), TaskQueue(tq), TQWorker(worker), tcon)
268#define mptaskRunCancelled(self, tq, worker) (self)->_->runCancelled(MultiphaseTask(self), TaskQueue(tq), TQWorker(worker))
270#define mptaskCancel(self) (self)->_->cancel(MultiphaseTask(self))
272#define mptaskReset(self) (self)->_->reset(MultiphaseTask(self))
278#define mptaskWait(self, timeout) (self)->_->wait(MultiphaseTask(self), timeout)
280#define mptaskCmp(self, other, flags) (self)->_->cmp(MultiphaseTask(self), other, flags)
282#define mptaskHash(self, flags) (self)->_->hash(MultiphaseTask(self), flags)
290#define mptaskFinish(self, result, tcon) (self)->_->finish(MultiphaseTask(self), result, tcon)
Complex task with dependencies, scheduling, and resource management.
#define saDeclarePtr(name)
MultiphaseTaskFlagsEnum
Flags controlling MultiphaseTask behavior.
uint32(* MPTPhaseFunc)(void *self, TaskQueue *tq, TQWorker *worker, TaskControl *tcon)
@ MPTASK_Greedy
Execute all phases immediately without yielding to other tasks.
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.
Complex task with dependencies, scheduling, and resource management.
Multiphase task with internal state machine for sequential execution phases.
cchain oncomplete
Functions called when task completes (success or failure)
sa_TaskRequires _requires
List of requirements (dependencies, resources, gates)
bool _fail
True if currently executing fail phases.
string name
Task name shown in monitor output.
int64 lastprogress
Timestamp of last progress change.
uint16 _intflags
Internal flags reserved for scheduler use.
sa_MPTPhaseFunc phases
Normal execution phases.
atomic(uint32) _advcount
Number of times task has been advanced.
int64 last
Last time this task was moved between queues and/or run.
uint32 _phase
Current phase index.
uint16 flags
Task behavior flags (ComplexTaskFlagsEnum)
int64 nextrun
Next scheduled run time.
Weak(ComplexTaskQueue) *lastq
Last queue this task ran on before being deferred.
sa_MPTPhaseFunc failphases
Failure handling phases.
One-time event gate for task synchronization.