CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
tqmanager.h
1#pragma once
2// This header file is auto-generated!
3// Do not make changes to this file or they will be overwritten.
4// clang-format off
5#include <cx/obj.h>
6#include <cx/struct.h>
8
9CX_C_BEGIN
10
11typedef struct TaskQueue TaskQueue;
12typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
13typedef struct TQManager TQManager;
14typedef struct TQManager_WeakRef TQManager_WeakRef;
15saDeclarePtr(TQManager);
16saDeclarePtr(TQManager_WeakRef);
17#define _sti_TQManager _sti_object
18#define SType_TQManager TQManager*
19#define STStorageType_TQManager TQManager*
20#define STypeArg_TQManager(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(TQManager, val))
21#define STypeArgPtr_TQManager(type, val) (stgeneric*)objInstCheckClassPtr(TQManager, val)
22#define STypeCheckedArg_TQManager(type, val) stType(type), stArg(type, val)
23#define STypeCheckedPtrArg_TQManager(type, val) stType(type), stArgPtr(type, val)
24
25// absolute maximum time between manager cycles
26#define MAX_MANAGER_INTERVAL (timeS(10))
27
28typedef struct TQManager_ClassIf {
29 ObjIface* _implements;
30 ObjIface* _parent;
31 size_t _size;
32
33 bool (*start)(_In_ void* self, _In_ TaskQueue* tq);
34 bool (*stop)(_In_ void* self);
35 void (*notify)(_In_ void* self, bool wakeup);
36 // for in-worker managers, this is called BEFORE a task is run by the worker
37 void (*pretask)(_In_ void* self);
38 int64 (*tick)(_In_ void* self);
39} TQManager_ClassIf;
40extern TQManager_ClassIf TQManager_ClassIf_tmpl;
41
42typedef struct TQManager {
43 union {
44 TQManager_ClassIf* _;
45 void* _is_TQManager;
46 void* _is_ObjInst;
47 };
48 ObjClassInfo* _clsinfo;
49 atomic(uintptr) _ref;
50 atomic(ptr) _weakref;
51
52 TaskQueue* tq;
53 bool needsWorkerTick; // true if this manager needs to be ticked by the worker
54} TQManager;
55extern ObjClassInfo TQManager_clsinfo;
56#define TQManager(inst) objInstCheckClass(TQManager, inst)
57#define TQManagerNone ((TQManager*)NULL)
58
59typedef struct TQManager_WeakRef {
60 union {
61 ObjInst* _inst;
62 void* _is_TQManager_WeakRef;
63 void* _is_ObjInst_WeakRef;
64 };
65 atomic(uintptr) _ref;
66 RWLock _lock;
67} TQManager_WeakRef;
68#define TQManager_WeakRef(inst) objWeakRefCheckClass(TQManager, inst)
69
70// bool tqmanagerStart(TQManager* self, TaskQueue* tq);
71#define tqmanagerStart(self, tq) (self)->_->start(TQManager(self), TaskQueue(tq))
72// bool tqmanagerStop(TQManager* self);
73#define tqmanagerStop(self) (self)->_->stop(TQManager(self))
74// void tqmanagerNotify(TQManager* self, bool wakeup);
75#define tqmanagerNotify(self, wakeup) (self)->_->notify(TQManager(self), wakeup)
76// void tqmanagerPretask(TQManager* self);
77//
78// for in-worker managers, this is called BEFORE a task is run by the worker
79#define tqmanagerPretask(self) (self)->_->pretask(TQManager(self))
80// int64 tqmanagerTick(TQManager* self);
81#define tqmanagerTick(self) (self)->_->tick(TQManager(self))
82
83CX_C_END
#define saDeclarePtr(name)
Definition sarray.h:100
CX Struct System - Introspectable, serializable POD structures in C.
CX Object System - Object-oriented programming in C.
Shared types and configuration structures for the task queue system.