CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
ComplexTask

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...
 

Detailed Description

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.

Macro Definition Documentation

◆ ctaskAcquireRequires

#define ctaskAcquireRequires (   self,
  acquired 
)    ComplexTask_acquireRequires(ComplexTask(self), acquired)

bool ctaskAcquireRequires(ComplexTask* self, sa_TaskRequires* acquired);

Try to acquire required resources.

Parameters
acquired[out] List of successfully acquired resources
Returns
true if all resources were acquired

Definition at line 225 of file complextask.h.

◆ ctaskAdvance

#define ctaskAdvance (   self)    ComplexTask_advance(ComplexTask(self))

bool ctaskAdvance(ComplexTask* self);

Advance a deferred task to run as soon as possible.

Returns
true if task was advanced

Definition at line 202 of file complextask.h.

◆ ctaskAdvanceCallback

#define ctaskAdvanceCallback (   cvars,
  args 
)    ComplexTask_advanceCallback(cvars, args)

bool ctaskAdvanceCallback(stvlist* cvars, stvlist* args);

Callback for use in closures to advance task.

Parameters
cvarsCaptured variables (weak reference to task)
argsClosure arguments
Returns
true if task was advanced

Definition at line 242 of file complextask.h.

◆ ctaskCancelRequires

#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.

◆ ctaskCheckRequires

#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.

Parameters
updateProgressIf true, update lastprogress timestamp
expires[out] Earliest expiration time of any requirement
Returns
Requirement state (TASK_Requires_Wait, TASK_Requires_Ok, etc.)

Definition at line 211 of file complextask.h.

◆ ctaskDependOn

#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.

◆ ctaskDependOnTimeout

#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.

◆ ctaskReleaseRequires

#define ctaskReleaseRequires (   self,
  resources 
)    ComplexTask_releaseRequires(ComplexTask(self), resources)

bool ctaskReleaseRequires(ComplexTask* self, sa_TaskRequires resources);

Release previously acquired resources.

Parameters
resourcesList of resources to release
Returns
true if resources were released

Definition at line 233 of file complextask.h.

◆ ctaskRequire

#define ctaskRequire (   self,
  req 
)    ComplexTask_require(ComplexTask(self), TaskRequires(req))

void ctaskRequire(ComplexTask* self, TaskRequires* req);

Add a generic requirement.

Parameters
reqCustom requirement object

Definition at line 195 of file complextask.h.

◆ ctaskRequireGate

#define ctaskRequireGate (   self,
  gate 
)    ComplexTask_requireGate(ComplexTask(self), TRGate(gate))

void ctaskRequireGate(ComplexTask* self, TRGate* gate);

Add a gate requirement.

Parameters
gateGate that must be opened before task runs

Definition at line 180 of file complextask.h.

◆ ctaskRequireGateTimeout

#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.

Parameters
gateGate to wait for
timeoutMaximum time to wait for gate

Definition at line 188 of file complextask.h.

◆ ctaskRequireResource

#define ctaskRequireResource (   self,
  res 
)    ComplexTask_requireResource(ComplexTask(self), TaskResource(res))

void ctaskRequireResource(ComplexTask* self, TaskResource* res);

Add a resource requirement.

Parameters
resResource to acquire exclusively

Definition at line 165 of file complextask.h.

◆ ctaskRequireResourceTimeout

#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.

Parameters
resResource to acquire
timeoutMaximum time to wait for resource

Definition at line 173 of file complextask.h.

◆ ctaskRequireTask

#define ctaskRequireTask (   self,
  dep,
  failok 
)    ComplexTask_requireTask(ComplexTask(self), Task(dep), failok)

void ctaskRequireTask(ComplexTask* self, Task* dep, bool failok);

Add a task dependency.

Parameters
depTask to depend on
failokIf true, don't fail if dep fails (soft dependency)

Definition at line 149 of file complextask.h.

◆ ctaskRequireTaskTimeout

#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.

Parameters
depTask to depend on
failokIf true, don't fail if dep fails
timeoutMaximum time to wait for dep

Definition at line 158 of file complextask.h.

◆ ctaskRun

#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.

Parameters
tqTask queue this task is running on
workerWorker thread executing this task
tconTaskControl structure for output parameters
Returns
TASK_Result_Success or TASK_Result_Failure

Definition at line 258 of file complextask.h.

◆ ctaskRunCancelled

#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.

Parameters
tqTask queue the task was on
workerWorker that picked up the cancelled task

Definition at line 264 of file complextask.h.

◆ ctaskWait

#define ctaskWait (   self,
  timeout 
)    (self)->_->wait(ComplexTask(self), timeout)

bool ctaskWait(ComplexTask* self, int64 timeout);

Wait for this task to complete.

Parameters
timeoutMaximum time to wait, or 0 to wait indefinitely
Returns
true if task completed within timeout

Definition at line 274 of file complextask.h.

◆ ctaskWaitFor

#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.

◆ ctaskWaitForTimeout

#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.

Enumeration Type Documentation

◆ ComplexTaskFlagsEnum

Flags controlling ComplexTask behavior.

Enumerator
TASK_Cancel_Cascade 

Cancel dependencies when this task is cancelled.

TASK_Retain_Requires 

Keep acquired resources across schedule/defer cycles.

TASK_Soft_Requires 

Allow task to run even if some dependencies fail.

TASK_Cancel_Expired 

Cancel dependencies that exceed their timeout.

TASK_Require_Failed 

[Internal] Set when a soft requirement failed

Definition at line 74 of file complextask.h.

◆ ComplexTaskInternalFlagsEnum

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.

◆ ComplexTaskRunResultEnum

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.