CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
tqminworker.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>
7#include "tqmthreadpool.h"
8#include <cx/thread/mutex.h>
9
10CX_C_BEGIN
11
12typedef struct TaskQueue TaskQueue;
13typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
14typedef struct TaskQueue TaskQueue;
15typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
16typedef struct TQThreadPoolRunner TQThreadPoolRunner;
17typedef struct TQThreadPoolRunner_WeakRef TQThreadPoolRunner_WeakRef;
18typedef struct TQInWorkerManager TQInWorkerManager;
19typedef struct TQInWorkerManager_WeakRef TQInWorkerManager_WeakRef;
20saDeclarePtr(TQInWorkerManager);
21saDeclarePtr(TQInWorkerManager_WeakRef);
22#define _sti_TQInWorkerManager _sti_object
23#define SType_TQInWorkerManager TQInWorkerManager*
24#define STStorageType_TQInWorkerManager TQInWorkerManager*
25#define STypeArg_TQInWorkerManager(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(TQInWorkerManager, val))
26#define STypeArgPtr_TQInWorkerManager(type, val) (stgeneric*)objInstCheckClassPtr(TQInWorkerManager, val)
27#define STypeCheckedArg_TQInWorkerManager(type, val) stType(type), stArg(type, val)
28#define STypeCheckedPtrArg_TQInWorkerManager(type, val) stType(type), stArgPtr(type, val)
29
30typedef struct TQInWorkerManager_ClassIf {
31 ObjIface* _implements;
32 ObjIface* _parent;
33 size_t _size;
34
35 bool (*start)(_In_ void* self, _In_ TaskQueue* tq);
36 bool (*stop)(_In_ void* self);
37 void (*notify)(_In_ void* self, bool wakeup);
38 // for in-worker managers, this is called BEFORE a task is run by the worker
39 void (*pretask)(_In_ void* self);
40 int64 (*tick)(_In_ void* self);
41 void (*updatePoolSize)(_In_ void* self);
42} TQInWorkerManager_ClassIf;
43extern TQInWorkerManager_ClassIf TQInWorkerManager_ClassIf_tmpl;
44
45typedef struct TQInWorkerManager {
46 union {
47 TQInWorkerManager_ClassIf* _;
48 void* _is_TQInWorkerManager;
49 void* _is_TQThreadPoolManager;
50 void* _is_TQManager;
51 void* _is_ObjInst;
52 };
53 ObjClassInfo* _clsinfo;
54 atomic(uintptr) _ref;
55 atomic(ptr) _weakref;
56
57 TaskQueue* tq;
58 bool needsWorkerTick; // true if this manager needs to be ticked by the worker
59 TQThreadPoolRunner* runner;
60 uint32 lastcount;
61 int64 lastop;
62 int64 idlestart;
63 Mutex mgrlock; // one worker can run the manager at a time
64 atomic(bool) needrun; // manager needs to be run ASAP
65} TQInWorkerManager;
66extern ObjClassInfo TQInWorkerManager_clsinfo;
67#define TQInWorkerManager(inst) objInstCheckClass(TQInWorkerManager, inst)
68#define TQInWorkerManagerNone ((TQInWorkerManager*)NULL)
69
70typedef struct TQInWorkerManager_WeakRef {
71 union {
72 ObjInst* _inst;
73 void* _is_TQInWorkerManager_WeakRef;
74 void* _is_TQThreadPoolManager_WeakRef;
75 void* _is_TQManager_WeakRef;
76 void* _is_ObjInst_WeakRef;
77 };
78 atomic(uintptr) _ref;
79 RWLock _lock;
80} TQInWorkerManager_WeakRef;
81#define TQInWorkerManager_WeakRef(inst) objWeakRefCheckClass(TQInWorkerManager, inst)
82
83_objfactory_guaranteed TQInWorkerManager* TQInWorkerManager_create();
84// TQInWorkerManager* tqinworkermanagerCreate();
85#define tqinworkermanagerCreate() TQInWorkerManager_create()
86
87// bool tqinworkermanagerStart(TQInWorkerManager* self, TaskQueue* tq);
88#define tqinworkermanagerStart(self, tq) (self)->_->start(TQInWorkerManager(self), TaskQueue(tq))
89// bool tqinworkermanagerStop(TQInWorkerManager* self);
90#define tqinworkermanagerStop(self) (self)->_->stop(TQInWorkerManager(self))
91// void tqinworkermanagerNotify(TQInWorkerManager* self, bool wakeup);
92#define tqinworkermanagerNotify(self, wakeup) (self)->_->notify(TQInWorkerManager(self), wakeup)
93// void tqinworkermanagerPretask(TQInWorkerManager* self);
94//
95// for in-worker managers, this is called BEFORE a task is run by the worker
96#define tqinworkermanagerPretask(self) (self)->_->pretask(TQInWorkerManager(self))
97// int64 tqinworkermanagerTick(TQInWorkerManager* self);
98#define tqinworkermanagerTick(self) (self)->_->tick(TQInWorkerManager(self))
99// void tqinworkermanagerUpdatePoolSize(TQInWorkerManager* self);
100#define tqinworkermanagerUpdatePoolSize(self) (self)->_->updatePoolSize(TQInWorkerManager(self))
101
102CX_C_END
#define saDeclarePtr(name)
Definition sarray.h:100
#define _objfactory_guaranteed
Definition objimpl.h:106
CX Struct System - Introspectable, serializable POD structures in C.
Mutex synchronization primitive.
CX Object System - Object-oriented programming in C.
Definition mutex.h:60