49typedef struct TaskQueue TaskQueue;
50typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
51typedef struct TQWorker TQWorker;
52typedef struct TQWorker_WeakRef TQWorker_WeakRef;
54typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
56typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
58typedef struct TRGate_WeakRef TRGate_WeakRef;
59typedef struct ComplexTaskQueue ComplexTaskQueue;
60typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
63typedef struct MultiphaseTask_WeakRef MultiphaseTask_WeakRef;
83#define mptaskAddPhases(self, parr) mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), false)
88#define mptaskAddFailPhases(self, parr) mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), true)
90typedef struct MultiphaseTask_ClassIf {
95 uint32 (*run)(_In_
void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker, _Inout_
TaskControl* tcon);
96 void (*runCancelled)(_In_
void* self, _In_ TaskQueue* tq, _In_ TQWorker* worker);
97 bool (*cancel)(_In_
void* self);
98 bool (*reset)(_In_
void* self);
99 bool (*wait)(_In_
void* self, int64 timeout);
100 intptr (*cmp)(_In_
void* self,
void* other, uint32 flags);
101 uint32 (*hash)(_In_
void* self, uint32 flags);
102 uint32 (*finish)(_In_
void* self, uint32 result,
TaskControl* tcon);
103} MultiphaseTask_ClassIf;
104extern MultiphaseTask_ClassIf MultiphaseTask_ClassIf_tmpl;
109 MultiphaseTask_ClassIf* _;
110 void* _is_MultiphaseTask;
111 void* _is_ComplexTask;
117 atomic(uintptr) _ref;
118 atomic(ptr) _weakref;
137#define MultiphaseTask(inst) ((MultiphaseTask*)(unused_noeval((inst) && &((inst)->_is_MultiphaseTask)), (inst)))
138#define MultiphaseTaskNone ((MultiphaseTask*)NULL)
140typedef struct MultiphaseTask_WeakRef {
143 void* _is_MultiphaseTask_WeakRef;
144 void* _is_ComplexTask_WeakRef;
145 void* _is_Task_WeakRef;
146 void* _is_BasicTask_WeakRef;
147 void* _is_ObjInst_WeakRef;
149 atomic(uintptr) _ref;
151} MultiphaseTask_WeakRef;
152#define MultiphaseTask_WeakRef(inst) ((MultiphaseTask_WeakRef*)(unused_noeval((inst) && &((inst)->_is_MultiphaseTask_WeakRef)), (inst)))
162#define mptask_addPhases(self, num, parr, fail) MultiphaseTask__addPhases(MultiphaseTask(self), num, parr, fail)
169#define mptaskRequireTask(self, dep, failok) ComplexTask_requireTask(ComplexTask(self), Task(dep), failok)
177#define mptaskRequireTaskTimeout(self, dep, failok, timeout) ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout)
183#define mptaskRequireResource(self, res) ComplexTask_requireResource(ComplexTask(self), TaskResource(res))
190#define mptaskRequireResourceTimeout(self, res, timeout) ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout)
196#define mptaskRequireGate(self, gate) ComplexTask_requireGate(ComplexTask(self), TRGate(gate))
203#define mptaskRequireGateTimeout(self, gate, timeout) ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout)
209#define mptaskRequire(self, req) ComplexTask_require(ComplexTask(self), TaskRequires(req))
215#define mptaskAdvance(self) ComplexTask_advance(ComplexTask(self))
223#define mptaskCheckRequires(self, updateProgress, expires) ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires)
228#define mptaskCancelRequires(self) ComplexTask_cancelRequires(ComplexTask(self))
235#define mptaskAcquireRequires(self, acquired) ComplexTask_acquireRequires(ComplexTask(self), acquired)
242#define mptaskReleaseRequires(self, resources) ComplexTask_releaseRequires(ComplexTask(self), resources)
245#define mptask_setState(self, newstate) BasicTask__setState(BasicTask(self), newstate)
248#define mptaskRun(self, tq, worker, tcon) (self)->_->run(MultiphaseTask(self), TaskQueue(tq), TQWorker(worker), tcon)
254#define mptaskRunCancelled(self, tq, worker) (self)->_->runCancelled(MultiphaseTask(self), TaskQueue(tq), TQWorker(worker))
256#define mptaskCancel(self) (self)->_->cancel(MultiphaseTask(self))
258#define mptaskReset(self) (self)->_->reset(MultiphaseTask(self))
264#define mptaskWait(self, timeout) (self)->_->wait(MultiphaseTask(self), timeout)
266#define mptaskCmp(self, other, flags) (self)->_->cmp(MultiphaseTask(self), other, flags)
268#define mptaskHash(self, flags) (self)->_->hash(MultiphaseTask(self), flags)
276#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 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.
atomic(uint32) state
Current task state and flags.
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.