9#include <cx/thread/prqueue.h>
11typedef struct TQRunner TQRunner;
12typedef struct TQRunner_WeakRef TQRunner_WeakRef;
13typedef struct TQManager TQManager;
14typedef struct TQManager_WeakRef TQManager_WeakRef;
15typedef struct TQMonitor TQMonitor;
16typedef struct TQMonitor_WeakRef TQMonitor_WeakRef;
17typedef struct TQWorker TQWorker;
18typedef struct TQWorker_WeakRef TQWorker_WeakRef;
20typedef struct BasicTask_WeakRef BasicTask_WeakRef;
21typedef struct TaskQueue TaskQueue;
22typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
26typedef enum TaskQueueStateEnum {
34typedef struct TaskQueue_ClassIf {
40 bool (*start)(_In_
void* self);
42 bool (*stop)(_In_
void* self, int64 timeout);
44 bool (*add)(_In_
void* self, _In_
BasicTask* btask);
46 int64 (*tick)(_In_
void* self);
48 bool (*_processDone)(_In_
void* self);
50 int64 (*_processExtra)(_In_
void* self,
bool taskscompleted);
52 bool (*_queueMaint)(_In_
void* self);
54 bool (*_runTask)(_In_
void* self, _Inout_
BasicTask** pbtask, _In_ TQWorker* worker);
56 void (*_clear)(_In_
void* self);
58extern TaskQueue_ClassIf TaskQueue_ClassIf_tmpl;
60typedef struct TaskQueue {
84#define TaskQueue(inst) ((TaskQueue*)(unused_noeval((inst) && &((inst)->_is_TaskQueue)), (inst)))
85#define TaskQueueNone ((TaskQueue*)NULL)
87typedef struct TaskQueue_WeakRef {
90 void* _is_TaskQueue_WeakRef;
91 void* _is_ObjInst_WeakRef;
96#define TaskQueue_WeakRef(inst) ((TaskQueue_WeakRef*)(unused_noeval((inst) && &((inst)->_is_TaskQueue_WeakRef)), (inst)))
98_objfactory_guaranteed TaskQueue* TaskQueue_create(_In_opt_ strref name, uint32 flags, int64 gcinterval, _In_ TQRunner* runner, _In_ TQManager* manager, _In_opt_ TQMonitor* monitor);
100#define taskqueueCreate(name, flags, gcinterval, runner, manager, monitor) TaskQueue_create(name, flags, gcinterval, TQRunner(runner), TQManager(manager), TQMonitor(monitor))
105#define taskqueueStart(self) (self)->_->start(TaskQueue(self))
109#define taskqueueStop(self, timeout) (self)->_->stop(TaskQueue(self), timeout)
113#define taskqueueAdd(self, btask) (self)->_->add(TaskQueue(self), BasicTask(btask))
117#define taskqueueTick(self) (self)->_->tick(TaskQueue(self))
121#define taskqueue_processDone(self) (self)->_->_processDone(TaskQueue(self))
125#define taskqueue_processExtra(self, taskscompleted) (self)->_->_processExtra(TaskQueue(self), taskscompleted)
129#define taskqueue_queueMaint(self) (self)->_->_queueMaint(TaskQueue(self))
133#define taskqueue_runTask(self, pbtask, worker) (self)->_->_runTask(TaskQueue(self), pbtask, TQWorker(worker))
137#define taskqueue_clear(self) (self)->_->_clear(TaskQueue(self))
Event synchronization primitive.
#define saDeclarePtr(name)
#define _objfactory_guaranteed
CX Object System - Object-oriented programming in C.
Bare minimum task object with state tracking and run method.
Shared types and configuration structures for the task queue system.
Thread creation and management.