9typedef struct TQRunner TQRunner;
10typedef struct TQRunner_WeakRef TQRunner_WeakRef;
11typedef struct TQManager TQManager;
12typedef struct TQManager_WeakRef TQManager_WeakRef;
13typedef struct TQMonitor TQMonitor;
14typedef struct TQMonitor_WeakRef TQMonitor_WeakRef;
15typedef struct TQWorker TQWorker;
16typedef struct TQWorker_WeakRef TQWorker_WeakRef;
18typedef struct BasicTask_WeakRef BasicTask_WeakRef;
19typedef struct TaskQueue TaskQueue;
20typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
21typedef struct TQWorker TQWorker;
22typedef struct TQWorker_WeakRef TQWorker_WeakRef;
24typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
26typedef struct ComplexTask_WeakRef ComplexTask_WeakRef;
28typedef struct TRGate_WeakRef TRGate_WeakRef;
29typedef struct ComplexTaskQueue ComplexTaskQueue;
30typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
32typedef struct ComplexTaskQueue ComplexTaskQueue;
33typedef struct ComplexTaskQueue_WeakRef ComplexTaskQueue_WeakRef;
37typedef struct ComplexTaskQueue_ClassIf {
43 bool (*start)(_In_
void* self);
45 bool (*stop)(_In_
void* self, int64 timeout);
47 bool (*add)(_In_
void* self, _In_
BasicTask* btask);
49 int64 (*tick)(_In_
void* self);
51 bool (*_processDone)(_In_
void* self);
53 int64 (*_processExtra)(_In_
void* self,
bool taskscompleted);
55 bool (*_queueMaint)(_In_
void* self);
57 bool (*_runTask)(_In_
void* self, _Inout_
BasicTask** pbtask, _In_ TQWorker* worker);
59 void (*_clear)(_In_
void* self);
61 bool (*schedule)(_In_
void* self, _In_
ComplexTask* task, int64 delay);
63 bool (*defer)(_In_
void* self, _In_
ComplexTask* task);
64 bool (*advance)(_In_
void* self, _In_
ComplexTask* task);
65} ComplexTaskQueue_ClassIf;
66extern ComplexTaskQueue_ClassIf ComplexTaskQueue_ClassIf_tmpl;
68typedef struct ComplexTaskQueue {
70 ComplexTaskQueue_ClassIf* _;
71 void* _is_ComplexTaskQueue;
92 sa_ComplexTask scheduled;
96#define ComplexTaskQueue(inst) ((ComplexTaskQueue*)(unused_noeval((inst) && &((inst)->_is_ComplexTaskQueue)), (inst)))
97#define ComplexTaskQueueNone ((ComplexTaskQueue*)NULL)
99typedef struct ComplexTaskQueue_WeakRef {
102 void* _is_ComplexTaskQueue_WeakRef;
103 void* _is_TaskQueue_WeakRef;
104 void* _is_ObjInst_WeakRef;
106 atomic(uintptr) _ref;
108} ComplexTaskQueue_WeakRef;
109#define ComplexTaskQueue_WeakRef(inst) ((ComplexTaskQueue_WeakRef*)(unused_noeval((inst) && &((inst)->_is_ComplexTaskQueue_WeakRef)), (inst)))
111_objfactory_guaranteed ComplexTaskQueue* ComplexTaskQueue_create(_In_opt_ strref name, uint32 flags, int64 gcinterval, _In_ TQRunner* runner, _In_ TQManager* manager, _In_opt_ TQMonitor* monitor);
113#define ctaskqueueCreate(name, flags, gcinterval, runner, manager, monitor) ComplexTaskQueue_create(name, flags, gcinterval, TQRunner(runner), TQManager(manager), TQMonitor(monitor))
118#define ctaskqueueStart(self) (self)->_->start(ComplexTaskQueue(self))
122#define ctaskqueueStop(self, timeout) (self)->_->stop(ComplexTaskQueue(self), timeout)
126#define ctaskqueueAdd(self, btask) (self)->_->add(ComplexTaskQueue(self), BasicTask(btask))
130#define ctaskqueueTick(self) (self)->_->tick(ComplexTaskQueue(self))
134#define ctaskqueue_processDone(self) (self)->_->_processDone(ComplexTaskQueue(self))
138#define ctaskqueue_processExtra(self, taskscompleted) (self)->_->_processExtra(ComplexTaskQueue(self), taskscompleted)
142#define ctaskqueue_queueMaint(self) (self)->_->_queueMaint(ComplexTaskQueue(self))
146#define ctaskqueue_runTask(self, pbtask, worker) (self)->_->_runTask(ComplexTaskQueue(self), pbtask, TQWorker(worker))
150#define ctaskqueue_clear(self) (self)->_->_clear(ComplexTaskQueue(self))
154#define ctaskqueueSchedule(self, task, delay) (self)->_->schedule(ComplexTaskQueue(self), ComplexTask(task), delay)
158#define ctaskqueueDefer(self, task) (self)->_->defer(ComplexTaskQueue(self), ComplexTask(task))
160#define ctaskqueueAdvance(self, task) (self)->_->advance(ComplexTaskQueue(self), ComplexTask(task))
Complex task with dependencies, scheduling, and resource management.
#define saDeclarePtr(name)
#define _objfactory_guaranteed
CX Object System - Object-oriented programming in C.
Bare minimum task object with state tracking and run method.
Complex task with dependencies, scheduling, and resource management.
One-time event gate for task synchronization.