CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
tqthreadworker.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 "tqworker.h"
8#include <cx/thread.h>
9
10CX_C_BEGIN
11
12typedef struct TaskQueue TaskQueue;
13typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
14typedef struct TQThreadWorker TQThreadWorker;
15typedef struct TQThreadWorker_WeakRef TQThreadWorker_WeakRef;
16saDeclarePtr(TQThreadWorker);
17saDeclarePtr(TQThreadWorker_WeakRef);
18#define _sti_TQThreadWorker _sti_object
19#define SType_TQThreadWorker TQThreadWorker*
20#define STStorageType_TQThreadWorker TQThreadWorker*
21#define STypeArg_TQThreadWorker(type, val) stgeneric(object, (ObjInst*)objInstCheckClass(TQThreadWorker, val))
22#define STypeArgPtr_TQThreadWorker(type, val) (stgeneric*)objInstCheckClassPtr(TQThreadWorker, val)
23#define STypeCheckedArg_TQThreadWorker(type, val) stType(type), stArg(type, val)
24#define STypeCheckedPtrArg_TQThreadWorker(type, val) stType(type), stArgPtr(type, val)
25
26typedef struct TQThreadWorker_ClassIf {
27 ObjIface* _implements;
28 ObjIface* _parent;
29 size_t _size;
30
31 // hooks for derived classes to override if desired
32 // worker is starting up
33 void (*onStart)(_In_ void* self, _In_ TaskQueue* tq);
34 // worker should process tasks (call parent!)
35 int64 (*tick)(_In_ void* self, _In_ TaskQueue* tq);
36 // worker is shutting down
37 void (*onStop)(_In_ void* self, _In_ TaskQueue* tq);
38 bool (*startThread)(_In_ void* self, _In_ TaskQueue* tq);
39} TQThreadWorker_ClassIf;
40extern TQThreadWorker_ClassIf TQThreadWorker_ClassIf_tmpl;
41
42typedef struct TQThreadWorker {
43 union {
44 TQThreadWorker_ClassIf* _;
45 void* _is_TQThreadWorker;
46 void* _is_TQWorker;
47 void* _is_ObjInst;
48 };
49 ObjClassInfo* _clsinfo;
50 atomic(uintptr) _ref;
51 atomic(ptr) _weakref;
52
53 Thread* thr; // worker thread
54 atomic(ptr) curtask; // this worker's currently running task
55 TQUICallback ui;
56 int32 num; // worker number
57 bool shutdown;
58} TQThreadWorker;
59extern ObjClassInfo TQThreadWorker_clsinfo;
60#define TQThreadWorker(inst) objInstCheckClass(TQThreadWorker, inst)
61#define TQThreadWorkerNone ((TQThreadWorker*)NULL)
62
63typedef struct TQThreadWorker_WeakRef {
64 union {
65 ObjInst* _inst;
66 void* _is_TQThreadWorker_WeakRef;
67 void* _is_TQWorker_WeakRef;
68 void* _is_ObjInst_WeakRef;
69 };
70 atomic(uintptr) _ref;
71 RWLock _lock;
72} TQThreadWorker_WeakRef;
73#define TQThreadWorker_WeakRef(inst) objWeakRefCheckClass(TQThreadWorker, inst)
74
75_objfactory_guaranteed TQThreadWorker* TQThreadWorker_create(int32 num);
76// TQThreadWorker* tqthreadworkerCreate(int32 num);
77#define tqthreadworkerCreate(num) TQThreadWorker_create(num)
78
79// void tqthreadworkerOnStart(TQThreadWorker* self, TaskQueue* tq);
80//
81// hooks for derived classes to override if desired
82// worker is starting up
83#define tqthreadworkerOnStart(self, tq) (self)->_->onStart(TQThreadWorker(self), TaskQueue(tq))
84// int64 tqthreadworkerTick(TQThreadWorker* self, TaskQueue* tq);
85//
86// worker should process tasks (call parent!)
87#define tqthreadworkerTick(self, tq) (self)->_->tick(TQThreadWorker(self), TaskQueue(tq))
88// void tqthreadworkerOnStop(TQThreadWorker* self, TaskQueue* tq);
89//
90// worker is shutting down
91#define tqthreadworkerOnStop(self, tq) (self)->_->onStop(TQThreadWorker(self), TaskQueue(tq))
92// bool tqthreadworkerStartThread(TQThreadWorker* self, TaskQueue* tq);
93#define tqthreadworkerStartThread(self, tq) (self)->_->startThread(TQThreadWorker(self), TaskQueue(tq))
94
95CX_C_END
#define saDeclarePtr(name)
Definition sarray.h:100
#define _objfactory_guaranteed
Definition objimpl.h:106
bool(* TQUICallback)(TaskQueue *tq)
CX Struct System - Introspectable, serializable POD structures in C.
Threading system aggregated header.
CX Object System - Object-oriented programming in C.