CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
tqrthreadpool.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 "tqrunner.h"
8#include <cx/taskqueue/worker/tqthreadworker.h>
9#include <cx/thread/rwlock.h>
10
11CX_C_BEGIN
12
13typedef struct TaskQueue TaskQueue;
14typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
15typedef struct TaskQueue TaskQueue;
16typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
17typedef struct TaskQueue TaskQueue;
18typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
19typedef struct TQThreadWorker TQThreadWorker;
20typedef struct TQThreadWorker_WeakRef TQThreadWorker_WeakRef;
21typedef struct TQThreadPoolRunner TQThreadPoolRunner;
22typedef struct TQThreadPoolRunner_WeakRef TQThreadPoolRunner_WeakRef;
23saDeclarePtr(TQThreadPoolRunner);
24saDeclarePtr(TQThreadPoolRunner_WeakRef);
25#define _sti_TQThreadPoolRunner _sti_object
26#define SType_TQThreadPoolRunner TQThreadPoolRunner*
27#define STStorageType_TQThreadPoolRunner TQThreadPoolRunner*
28#define STypeArg_TQThreadPoolRunner(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(TQThreadPoolRunner, val))
29#define STypeArgPtr_TQThreadPoolRunner(type, val) (stgeneric*)objInstCheckClassPtr(TQThreadPoolRunner, val)
30#define STypeCheckedArg_TQThreadPoolRunner(type, val) stType(type), stArg(type, val)
31#define STypeCheckedPtrArg_TQThreadPoolRunner(type, val) stType(type), stArgPtr(type, val)
32
33typedef struct TQThreadPoolRunner_ClassIf {
34 ObjIface* _implements;
35 ObjIface* _parent;
36 size_t _size;
37
38 bool (*start)(_In_ void* self, _In_ TaskQueue* tq);
39 int64 (*tick)(_In_ void* self);
40 bool (*stop)(_In_ void* self);
41 bool (*addWorker)(_In_ void* self);
42 bool (*removeWorker)(_In_ void* self);
43 // worker factory for custom queues to override
44 _objfactory_guaranteed TQThreadWorker* (*createWorker)(_In_ void* self, int32 num);
45} TQThreadPoolRunner_ClassIf;
46extern TQThreadPoolRunner_ClassIf TQThreadPoolRunner_ClassIf_tmpl;
47
48typedef struct TQThreadPoolRunner {
49 union {
50 TQThreadPoolRunner_ClassIf* _;
51 void* _is_TQThreadPoolRunner;
52 void* _is_TQRunner;
53 void* _is_ObjInst;
54 };
55 ObjClassInfo* _clsinfo;
56 atomic(uintptr) _ref;
57 atomic(ptr) _weakref;
58
59 bool needsUIEvent;
60 TaskQueue* tq;
62 RWLock workerlock;
63 sa_TQThreadWorker workers;
64 Event workershutdown;
65} TQThreadPoolRunner;
66extern ObjClassInfo TQThreadPoolRunner_clsinfo;
67#define TQThreadPoolRunner(inst) objInstCheckClass(TQThreadPoolRunner, inst)
68#define TQThreadPoolRunnerNone ((TQThreadPoolRunner*)NULL)
69
70typedef struct TQThreadPoolRunner_WeakRef {
71 union {
72 ObjInst* _inst;
73 void* _is_TQThreadPoolRunner_WeakRef;
74 void* _is_TQRunner_WeakRef;
75 void* _is_ObjInst_WeakRef;
76 };
77 atomic(uintptr) _ref;
78 RWLock _lock;
79} TQThreadPoolRunner_WeakRef;
80#define TQThreadPoolRunner_WeakRef(inst) objWeakRefCheckClass(TQThreadPoolRunner, inst)
81
82_objfactory_guaranteed TQThreadPoolRunner* TQThreadPoolRunner_create(_In_ TaskQueueThreadPoolConfig* config);
83// TQThreadPoolRunner* tqthreadpoolrunnerCreate(TaskQueueThreadPoolConfig* config);
84#define tqthreadpoolrunnerCreate(config) TQThreadPoolRunner_create(config)
85
86// bool tqthreadpoolrunnerStart(TQThreadPoolRunner* self, TaskQueue* tq);
87#define tqthreadpoolrunnerStart(self, tq) (self)->_->start(TQThreadPoolRunner(self), TaskQueue(tq))
88// int64 tqthreadpoolrunnerTick(TQThreadPoolRunner* self);
89#define tqthreadpoolrunnerTick(self) (self)->_->tick(TQThreadPoolRunner(self))
90// bool tqthreadpoolrunnerStop(TQThreadPoolRunner* self);
91#define tqthreadpoolrunnerStop(self) (self)->_->stop(TQThreadPoolRunner(self))
92// bool tqthreadpoolrunnerAddWorker(TQThreadPoolRunner* self);
93#define tqthreadpoolrunnerAddWorker(self) (self)->_->addWorker(TQThreadPoolRunner(self))
94// bool tqthreadpoolrunnerRemoveWorker(TQThreadPoolRunner* self);
95#define tqthreadpoolrunnerRemoveWorker(self) (self)->_->removeWorker(TQThreadPoolRunner(self))
96// TQThreadWorker* tqthreadpoolrunnerCreateWorker(TQThreadPoolRunner* self, int32 num);
97//
98// worker factory for custom queues to override
99#define tqthreadpoolrunnerCreateWorker(self, num) (self)->_->createWorker(TQThreadPoolRunner(self), num)
100
101CX_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.
CX Object System - Object-oriented programming in C.
Reader-writer lock synchronization primitive.
Definition event.h:53
Thread pool configuration for a task queue.