|
CX Framework
Cross-platform C utility framework
|
Data Structures | |
| struct | MultiphaseTask |
| Multiphase task with internal state machine for sequential execution phases. More... | |
Macros | |
| #define | mptaskAddPhases(self, parr) mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), false) |
| #define | mptaskAddFailPhases(self, parr) mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), true) |
| #define | mptask_addPhases(self, num, parr, fail) MultiphaseTask__addPhases(MultiphaseTask(self), num, parr, fail) |
| #define | mptaskRequireTask(self, dep, failok) ComplexTask_requireTask(ComplexTask(self), Task(dep), failok) |
| #define | mptaskRequireTaskTimeout(self, dep, failok, timeout) ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout) |
| #define | mptaskRequireResource(self, res) ComplexTask_requireResource(ComplexTask(self), TaskResource(res)) |
| #define | mptaskRequireResourceTimeout(self, res, timeout) ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout) |
| #define | mptaskRequireGate(self, gate) ComplexTask_requireGate(ComplexTask(self), TRGate(gate)) |
| #define | mptaskRequireGateTimeout(self, gate, timeout) ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout) |
| #define | mptaskRequire(self, req) ComplexTask_require(ComplexTask(self), TaskRequires(req)) |
| #define | mptaskAdvance(self) ComplexTask_advance(ComplexTask(self)) |
| #define | mptaskCheckRequires(self, updateProgress, expires) ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires) |
| #define | mptaskCancelRequires(self) ComplexTask_cancelRequires(ComplexTask(self)) |
| #define | mptaskAcquireRequires(self, acquired) ComplexTask_acquireRequires(ComplexTask(self), acquired) |
| #define | mptaskReleaseRequires(self, resources) ComplexTask_releaseRequires(ComplexTask(self), resources) |
| #define | mptaskRunCancelled(self, tq, worker) (self)->_->runCancelled(MultiphaseTask(self), TaskQueue(tq), TQWorker(worker)) |
| #define | mptaskWait(self, timeout) (self)->_->wait(MultiphaseTask(self), timeout) |
| #define | mptaskFinish(self, result, tcon) (self)->_->finish(MultiphaseTask(self), result, tcon) |
Typedefs | |
| typedef struct MultiphaseTask | MultiphaseTask |
| Multiphase task with internal state machine for sequential execution phases. | |
| typedef uint32(* | MPTPhaseFunc) (void *self, TaskQueue *tq, TQWorker *worker, TaskControl *tcon) |
Enumerations | |
| enum | MultiphaseTaskFlagsEnum { MPTASK_Greedy = 0x10 } |
| Flags controlling MultiphaseTask behavior. More... | |
MultiphaseTask (MPTask) extends ComplexTask for operations that proceed through multiple distinct phases. Instead of implementing a single run() method, you add phase functions that execute sequentially based on return values.
Key features:
Common workflow:
mptaskAddPhases()mptaskAddFailPhases()finish() if you need custom cleanup or want to change the final resultExample:
| #define mptask_addPhases | ( | self, | |
| num, | |||
| parr, | |||
| fail | |||
| ) | MultiphaseTask__addPhases(MultiphaseTask(self), num, parr, fail) |
void mptask_addPhases(MultiphaseTask* self, int32 num, MPTPhaseFunc parr[], bool fail);
Internal method to add phases from array. Use mptaskAddPhases() or mptaskAddFailPhases() macros instead.
| num | Number of phases in array |
| parr | Array of phase functions |
| fail | If true, these are fail phases |
| #define mptaskAcquireRequires | ( | self, | |
| acquired | |||
| ) | ComplexTask_acquireRequires(ComplexTask(self), acquired) |
bool mptaskAcquireRequires(MultiphaseTask* self, sa_TaskRequires* acquired);
Try to acquire required resources.
| acquired | [out] List of successfully acquired resources |
| #define mptaskAddFailPhases | ( | self, | |
| parr | |||
| ) | mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), true) |
mptaskAddFailPhases(MultiphaseTask* self, MPTPhaseFunc parr[])
Adds failure handling phases from a static array. These phases only run if a normal phase returns TASK_Result_Failure.
| #define mptaskAddPhases | ( | self, | |
| parr | |||
| ) | mptask_addPhases(self, sizeof(parr) / sizeof((parr)[0]), (parr), false) |
mptaskAddPhases(MultiphaseTask* self, MPTPhaseFunc parr[])
Adds normal execution phases from a static array. The array size is automatically calculated.
| #define mptaskAdvance | ( | self | ) | ComplexTask_advance(ComplexTask(self)) |
bool mptaskAdvance(MultiphaseTask* self);
Advance a deferred task to run as soon as possible.
| #define mptaskCancelRequires | ( | self | ) | ComplexTask_cancelRequires(ComplexTask(self)) |
void mptaskCancelRequires(MultiphaseTask* self);
Cascade cancellation to dependencies if TASK_Cancel_Cascade is set.
| #define mptaskCheckRequires | ( | self, | |
| updateProgress, | |||
| expires | |||
| ) | ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires) |
uint32 mptaskCheckRequires(MultiphaseTask* self, bool updateProgress, int64* expires);
Check if all requirements are satisfied.
| updateProgress | If true, update lastprogress timestamp |
| expires | [out] Earliest expiration time of any requirement |
| #define mptaskFinish | ( | self, | |
| result, | |||
| tcon | |||
| ) | (self)->_->finish(MultiphaseTask(self), result, tcon) |
uint32 mptaskFinish(MultiphaseTask* self, uint32 result, TaskControl* tcon);
Called after all phases complete. Can be overridden to perform additional cleanup or change the final result.
| result | Result code from the last phase |
| tcon | Task control structure |
| #define mptaskReleaseRequires | ( | self, | |
| resources | |||
| ) | ComplexTask_releaseRequires(ComplexTask(self), resources) |
bool mptaskReleaseRequires(MultiphaseTask* self, sa_TaskRequires resources);
Release previously acquired resources.
| resources | List of resources to release |
| #define mptaskRequire | ( | self, | |
| req | |||
| ) | ComplexTask_require(ComplexTask(self), TaskRequires(req)) |
void mptaskRequire(MultiphaseTask* self, TaskRequires* req);
Add a generic requirement.
| req | Custom requirement object |
| #define mptaskRequireGate | ( | self, | |
| gate | |||
| ) | ComplexTask_requireGate(ComplexTask(self), TRGate(gate)) |
void mptaskRequireGate(MultiphaseTask* self, TRGate* gate);
Add a gate requirement.
| gate | Gate that must be opened before task runs |
| #define mptaskRequireGateTimeout | ( | self, | |
| gate, | |||
| timeout | |||
| ) | ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout) |
void mptaskRequireGateTimeout(MultiphaseTask* self, TRGate* gate, int64 timeout);
Add a gate requirement with timeout.
| gate | Gate to wait for |
| timeout | Maximum time to wait for gate |
| #define mptaskRequireResource | ( | self, | |
| res | |||
| ) | ComplexTask_requireResource(ComplexTask(self), TaskResource(res)) |
void mptaskRequireResource(MultiphaseTask* self, TaskResource* res);
Add a resource requirement.
| res | Resource to acquire exclusively |
| #define mptaskRequireResourceTimeout | ( | self, | |
| res, | |||
| timeout | |||
| ) | ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout) |
void mptaskRequireResourceTimeout(MultiphaseTask* self, TaskResource* res, int64 timeout);
Add a resource requirement with timeout.
| res | Resource to acquire |
| timeout | Maximum time to wait for resource |
| #define mptaskRequireTask | ( | self, | |
| dep, | |||
| failok | |||
| ) | ComplexTask_requireTask(ComplexTask(self), Task(dep), failok) |
void mptaskRequireTask(MultiphaseTask* self, Task* dep, bool failok);
Add a task dependency.
| dep | Task to depend on |
| failok | If true, don't fail if dep fails (soft dependency) |
| #define mptaskRequireTaskTimeout | ( | self, | |
| dep, | |||
| failok, | |||
| timeout | |||
| ) | ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout) |
void mptaskRequireTaskTimeout(MultiphaseTask* self, Task* dep, bool failok, int64 timeout);
Add a task dependency with timeout.
| dep | Task to depend on |
| failok | If true, don't fail if dep fails |
| timeout | Maximum time to wait for dep |
| #define mptaskRunCancelled | ( | self, | |
| tq, | |||
| worker | |||
| ) | (self)->_->runCancelled(MultiphaseTask(self), TaskQueue(tq), TQWorker(worker)) |
void mptaskRunCancelled(MultiphaseTask* self, TaskQueue* tq, TQWorker* worker);
Called when task is cancelled before it can run.
| tq | Task queue the task was on |
| worker | Worker that picked up the cancelled task |
| #define mptaskWait | ( | self, | |
| timeout | |||
| ) | (self)->_->wait(MultiphaseTask(self), timeout) |
bool mptaskWait(MultiphaseTask* self, int64 timeout);
Wait for this task to complete.
| timeout | Maximum time to wait, or 0 to wait indefinitely |
| typedef uint32(* MPTPhaseFunc) (void *self, TaskQueue *tq, TQWorker *worker, TaskControl *tcon) |
Phase function signature for multiphase tasks.
| self | Pointer to the MultiphaseTask (cast to your derived type) |
| tq | Task queue the phase is running on |
| worker | Worker thread executing this phase |
| tcon | Task control structure for output parameters |
Flags controlling MultiphaseTask behavior.
| Enumerator | |
|---|---|
| MPTASK_Greedy | Execute all phases immediately without yielding to other tasks. |