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