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