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