|
CX Framework
Cross-platform C utility framework
|
Data Structures | |
| struct | ComplexTask |
| Complex task with dependencies, scheduling, and resource management. More... | |
Macros | |
| #define | ctaskDependOn(task, dep) ctaskRequireTask(task, dep, false) |
| #define | ctaskWaitFor(task, dep) ctaskRequireTask(task, dep, true) |
| #define | ctaskDependOnTimeout(task, dep, timeout) ctaskRequireTaskTimeout(task, dep, false, timeout) |
| #define | ctaskWaitForTimeout(task, dep, timeout) ctaskRequireTaskTimeout(task, dep, true, timeout) |
| #define | ctaskRequireTask(self, dep, failok) ComplexTask_requireTask(ComplexTask(self), Task(dep), failok) |
| #define | ctaskRequireTaskTimeout(self, dep, failok, timeout) ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout) |
| #define | ctaskRequireResource(self, res) ComplexTask_requireResource(ComplexTask(self), TaskResource(res)) |
| #define | ctaskRequireResourceTimeout(self, res, timeout) ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout) |
| #define | ctaskRequireGate(self, gate) ComplexTask_requireGate(ComplexTask(self), TRGate(gate)) |
| #define | ctaskRequireGateTimeout(self, gate, timeout) ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout) |
| #define | ctaskRequire(self, req) ComplexTask_require(ComplexTask(self), TaskRequires(req)) |
| #define | ctaskAdvance(self) ComplexTask_advance(ComplexTask(self)) |
| #define | ctaskCheckRequires(self, updateProgress, expires) ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires) |
| #define | ctaskCancelRequires(self) ComplexTask_cancelRequires(ComplexTask(self)) |
| #define | ctaskAcquireRequires(self, acquired) ComplexTask_acquireRequires(ComplexTask(self), acquired) |
| #define | ctaskReleaseRequires(self, resources) ComplexTask_releaseRequires(ComplexTask(self), resources) |
| #define | ctaskAdvanceCallback(cvars, args) ComplexTask_advanceCallback(cvars, args) |
| #define | ctaskRun(self, tq, worker, tcon) (self)->_->run(ComplexTask(self), TaskQueue(tq), TQWorker(worker), tcon) |
| #define | ctaskRunCancelled(self, tq, worker) (self)->_->runCancelled(ComplexTask(self), TaskQueue(tq), TQWorker(worker)) |
| #define | ctaskWait(self, timeout) (self)->_->wait(ComplexTask(self), timeout) |
Typedefs | |
| typedef struct ComplexTask | ComplexTask |
| Complex task with dependencies, scheduling, and resource management. | |
Enumerations | |
| enum | ComplexTaskRunResultEnum { TASK_Result_Schedule = TASK_Result_Basic_Count , TASK_Result_Schedule_Progress , TASK_Result_Defer , TASK_Result_Defer_Progress , TASK_Result_Complex_Count } |
| Return values from ComplexTask::run() extending BasicTaskRunResultEnum. More... | |
| enum | ComplexTaskFlagsEnum { TASK_Cancel_Cascade = 0x01 , TASK_Retain_Requires = 0x02 , TASK_Soft_Requires = 0x04 , TASK_Cancel_Expired = 0x08 , TASK_Require_Failed = 0xa0 } |
| Flags controlling ComplexTask behavior. More... | |
| enum | ComplexTaskInternalFlagsEnum { TASK_INTERNAL_Owns_Resources = 0x01 } |
| Internal flags reserved for scheduler use. More... | |
ComplexTask extends Task with advanced features:
ComplexTask can only run on a ComplexTaskQueue (the default queue type). The queue maintains separate lists for scheduled and deferred tasks, and manages resource acquisition.
| #define ctaskAcquireRequires | ( | self, | |
| acquired | |||
| ) | ComplexTask_acquireRequires(ComplexTask(self), acquired) |
bool ctaskAcquireRequires(ComplexTask* self, sa_TaskRequires* acquired);
Try to acquire required resources.
| acquired | [out] List of successfully acquired resources |
Definition at line 225 of file complextask.h.
| #define ctaskAdvance | ( | self | ) | ComplexTask_advance(ComplexTask(self)) |
bool ctaskAdvance(ComplexTask* self);
Advance a deferred task to run as soon as possible.
Definition at line 202 of file complextask.h.
| #define ctaskAdvanceCallback | ( | cvars, | |
| args | |||
| ) | ComplexTask_advanceCallback(cvars, args) |
bool ctaskAdvanceCallback(stvlist* cvars, stvlist* args);
Callback for use in closures to advance task.
| cvars | Captured variables (weak reference to task) |
| args | Closure arguments |
Definition at line 242 of file complextask.h.
| #define ctaskCancelRequires | ( | self | ) | ComplexTask_cancelRequires(ComplexTask(self)) |
void ctaskCancelRequires(ComplexTask* self);
Cascade cancellation to dependencies if TASK_Cancel_Cascade is set.
Definition at line 217 of file complextask.h.
| #define ctaskCheckRequires | ( | self, | |
| updateProgress, | |||
| expires | |||
| ) | ComplexTask_checkRequires(ComplexTask(self), updateProgress, expires) |
uint32 ctaskCheckRequires(ComplexTask* 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 |
Definition at line 211 of file complextask.h.
| #define ctaskDependOn | ( | task, | |
| dep | |||
| ) | ctaskRequireTask(task, dep, false) |
ctaskDependOn(ComplexTask *task, Task *dep)
Make task depend on another task completing successfully. If dep fails, task will fail without running.
Definition at line 52 of file complextask.h.
| #define ctaskDependOnTimeout | ( | task, | |
| dep, | |||
| timeout | |||
| ) | ctaskRequireTaskTimeout(task, dep, false, timeout) |
ctaskDependOnTimeout(ComplexTask *task, Task *dep, int64 timeout)
Make task depend on another task with a timeout.
Definition at line 60 of file complextask.h.
| #define ctaskReleaseRequires | ( | self, | |
| resources | |||
| ) | ComplexTask_releaseRequires(ComplexTask(self), resources) |
bool ctaskReleaseRequires(ComplexTask* self, sa_TaskRequires resources);
Release previously acquired resources.
| resources | List of resources to release |
Definition at line 233 of file complextask.h.
| #define ctaskRequire | ( | self, | |
| req | |||
| ) | ComplexTask_require(ComplexTask(self), TaskRequires(req)) |
void ctaskRequire(ComplexTask* self, TaskRequires* req);
Add a generic requirement.
| req | Custom requirement object |
Definition at line 195 of file complextask.h.
| #define ctaskRequireGate | ( | self, | |
| gate | |||
| ) | ComplexTask_requireGate(ComplexTask(self), TRGate(gate)) |
void ctaskRequireGate(ComplexTask* self, TRGate* gate);
Add a gate requirement.
| gate | Gate that must be opened before task runs |
Definition at line 180 of file complextask.h.
| #define ctaskRequireGateTimeout | ( | self, | |
| gate, | |||
| timeout | |||
| ) | ComplexTask_requireGateTimeout(ComplexTask(self), TRGate(gate), timeout) |
void ctaskRequireGateTimeout(ComplexTask* self, TRGate* gate, int64 timeout);
Add a gate requirement with timeout.
| gate | Gate to wait for |
| timeout | Maximum time to wait for gate |
Definition at line 188 of file complextask.h.
| #define ctaskRequireResource | ( | self, | |
| res | |||
| ) | ComplexTask_requireResource(ComplexTask(self), TaskResource(res)) |
void ctaskRequireResource(ComplexTask* self, TaskResource* res);
Add a resource requirement.
| res | Resource to acquire exclusively |
Definition at line 165 of file complextask.h.
| #define ctaskRequireResourceTimeout | ( | self, | |
| res, | |||
| timeout | |||
| ) | ComplexTask_requireResourceTimeout(ComplexTask(self), TaskResource(res), timeout) |
void ctaskRequireResourceTimeout(ComplexTask* self, TaskResource* res, int64 timeout);
Add a resource requirement with timeout.
| res | Resource to acquire |
| timeout | Maximum time to wait for resource |
Definition at line 173 of file complextask.h.
| #define ctaskRequireTask | ( | self, | |
| dep, | |||
| failok | |||
| ) | ComplexTask_requireTask(ComplexTask(self), Task(dep), failok) |
void ctaskRequireTask(ComplexTask* 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) |
Definition at line 149 of file complextask.h.
| #define ctaskRequireTaskTimeout | ( | self, | |
| dep, | |||
| failok, | |||
| timeout | |||
| ) | ComplexTask_requireTaskTimeout(ComplexTask(self), Task(dep), failok, timeout) |
void ctaskRequireTaskTimeout(ComplexTask* 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 |
Definition at line 158 of file complextask.h.
| #define ctaskRun | ( | self, | |
| tq, | |||
| worker, | |||
| tcon | |||
| ) | (self)->_->run(ComplexTask(self), TaskQueue(tq), TQWorker(worker), tcon) |
uint32 ctaskRun(ComplexTask* self, TaskQueue* tq, TQWorker* worker, TaskControl* tcon);
Abstract method that derived classes must implement to define task behavior.
This method is called by the task queue system when the task is ready to execute. Do not call this method directly. Derived classes must implement this to provide the actual task logic.
| tq | Task queue this task is running on |
| worker | Worker thread executing this task |
| tcon | TaskControl structure for output parameters |
Definition at line 258 of file complextask.h.
| #define ctaskRunCancelled | ( | self, | |
| tq, | |||
| worker | |||
| ) | (self)->_->runCancelled(ComplexTask(self), TaskQueue(tq), TQWorker(worker)) |
void ctaskRunCancelled(ComplexTask* 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 |
Definition at line 264 of file complextask.h.
| #define ctaskWait | ( | self, | |
| timeout | |||
| ) | (self)->_->wait(ComplexTask(self), timeout) |
bool ctaskWait(ComplexTask* self, int64 timeout);
Wait for this task to complete.
| timeout | Maximum time to wait, or 0 to wait indefinitely |
Definition at line 274 of file complextask.h.
| #define ctaskWaitFor | ( | task, | |
| dep | |||
| ) | ctaskRequireTask(task, dep, true) |
ctaskWaitFor(ComplexTask *task, Task *dep)
Make task wait for another task to complete, but don't fail if dep fails.
Definition at line 56 of file complextask.h.
| #define ctaskWaitForTimeout | ( | task, | |
| dep, | |||
| timeout | |||
| ) | ctaskRequireTaskTimeout(task, dep, true, timeout) |
ctaskWaitForTimeout(ComplexTask *task, Task *dep, int64 timeout)
Make task wait for another task with a timeout.
Definition at line 64 of file complextask.h.
| enum ComplexTaskFlagsEnum |
Flags controlling ComplexTask behavior.
Definition at line 74 of file complextask.h.
Internal flags reserved for scheduler use.
| Enumerator | |
|---|---|
| TASK_INTERNAL_Owns_Resources | The task has acquired resources and needs to release them. |
Definition at line 82 of file complextask.h.
Return values from ComplexTask::run() extending BasicTaskRunResultEnum.
| Enumerator | |
|---|---|
| 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. |
Definition at line 66 of file complextask.h.