14typedef struct TQRunner TQRunner;
15typedef struct TQRunner_WeakRef TQRunner_WeakRef;
16typedef struct TQManager TQManager;
17typedef struct TQManager_WeakRef TQManager_WeakRef;
18typedef struct TQMonitor TQMonitor;
19typedef struct TQMonitor_WeakRef TQMonitor_WeakRef;
20typedef struct TQWorker TQWorker;
21typedef struct TQWorker_WeakRef TQWorker_WeakRef;
23typedef struct BasicTask_WeakRef BasicTask_WeakRef;
24typedef struct TaskQueue TaskQueue;
25typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
28#define _sti_TaskQueue _sti_object
29#define SType_TaskQueue TaskQueue*
30#define STStorageType_TaskQueue TaskQueue*
31#define STypeArg_TaskQueue(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(TaskQueue, val))
32#define STypeArgPtr_TaskQueue(type, val) (stgeneric*)objInstCheckClassPtr(TaskQueue, val)
33#define STypeCheckedArg_TaskQueue(type, val) stType(type), stArg(type, val)
34#define STypeCheckedPtrArg_TaskQueue(type, val) stType(type), stArgPtr(type, val)
36typedef enum TaskQueueStateEnum {
44typedef struct TaskQueue_ClassIf {
50 bool (*start)(_In_
void* self);
52 bool (*stop)(_In_
void* self, int64 timeout);
54 bool (*add)(_In_
void* self, _In_
BasicTask* btask);
56 int64 (*tick)(_In_
void* self);
58 bool (*_processDone)(_In_
void* self);
60 int64 (*_processExtra)(_In_
void* self,
bool taskscompleted);
62 bool (*_queueMaint)(_In_
void* self);
64 bool (*_runTask)(_In_
void* self, _Inout_
BasicTask** pbtask, _In_ TQWorker* worker);
66 void (*_clear)(_In_
void* self);
68extern TaskQueue_ClassIf TaskQueue_ClassIf_tmpl;
70typedef struct TaskQueue {
94#define TaskQueue(inst) objInstCheckClass(TaskQueue, inst)
95#define TaskQueueNone ((TaskQueue*)NULL)
97typedef struct TaskQueue_WeakRef {
100 void* _is_TaskQueue_WeakRef;
101 void* _is_ObjInst_WeakRef;
103 atomic(uintptr) _ref;
106#define TaskQueue_WeakRef(inst) objWeakRefCheckClass(TaskQueue, inst)
108_objfactory_guaranteed TaskQueue* TaskQueue_create(_In_opt_ strref name, uint32 flags, int64 gcinterval, _In_ TQRunner* runner, _In_ TQManager* manager, _In_opt_ TQMonitor* monitor);
110#define taskqueueCreate(name, flags, gcinterval, runner, manager, monitor) TaskQueue_create(name, flags, gcinterval, TQRunner(runner), TQManager(manager), TQMonitor(monitor))
115#define taskqueueStart(self) (self)->_->start(TaskQueue(self))
119#define taskqueueStop(self, timeout) (self)->_->stop(TaskQueue(self), timeout)
123#define taskqueueAdd(self, btask) (self)->_->add(TaskQueue(self), BasicTask(btask))
127#define taskqueueTick(self) (self)->_->tick(TaskQueue(self))
131#define taskqueue_processDone(self) (self)->_->_processDone(TaskQueue(self))
135#define taskqueue_processExtra(self, taskscompleted) (self)->_->_processExtra(TaskQueue(self), taskscompleted)
139#define taskqueue_queueMaint(self) (self)->_->_queueMaint(TaskQueue(self))
143#define taskqueue_runTask(self, pbtask, worker) (self)->_->_runTask(TaskQueue(self), pbtask, TQWorker(worker))
147#define taskqueue_clear(self) (self)->_->_clear(TaskQueue(self))
Event synchronization primitive.
#define saDeclarePtr(name)
#define _objfactory_guaranteed
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.
Lock-free pointer FIFO queue.
Bare minimum task object with state tracking and run method.
Shared types and configuration structures for the task queue system.
Thread creation and management.