CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
tqmanager.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>
7
8typedef struct TaskQueue TaskQueue;
9typedef struct TaskQueue_WeakRef TaskQueue_WeakRef;
10typedef struct TQManager TQManager;
11typedef struct TQManager_WeakRef TQManager_WeakRef;
12saDeclarePtr(TQManager);
13saDeclarePtr(TQManager_WeakRef);
14
15// absolute maximum time between manager cycles
16#define MAX_MANAGER_INTERVAL (timeS(10))
17
18typedef struct TQManager_ClassIf {
19 ObjIface* _implements;
20 ObjIface* _parent;
21 size_t _size;
22
23 bool (*start)(_In_ void* self, _In_ TaskQueue* tq);
24 bool (*stop)(_In_ void* self);
25 void (*notify)(_In_ void* self, bool wakeup);
26 // for in-worker managers, this is called BEFORE a task is run by the worker
27 void (*pretask)(_In_ void* self);
28 int64 (*tick)(_In_ void* self);
29} TQManager_ClassIf;
30extern TQManager_ClassIf TQManager_ClassIf_tmpl;
31
32typedef struct TQManager {
33 union {
34 TQManager_ClassIf* _;
35 void* _is_TQManager;
36 void* _is_ObjInst;
37 };
38 ObjClassInfo* _clsinfo;
39 atomic(uintptr) _ref;
40 atomic(ptr) _weakref;
41
42 TaskQueue* tq;
43 bool needsWorkerTick; // true if this manager needs to be ticked by the worker
44} TQManager;
45extern ObjClassInfo TQManager_clsinfo;
46#define TQManager(inst) ((TQManager*)(unused_noeval((inst) && &((inst)->_is_TQManager)), (inst)))
47#define TQManagerNone ((TQManager*)NULL)
48
49typedef struct TQManager_WeakRef {
50 union {
51 ObjInst* _inst;
52 void* _is_TQManager_WeakRef;
53 void* _is_ObjInst_WeakRef;
54 };
55 atomic(uintptr) _ref;
56 RWLock _lock;
57} TQManager_WeakRef;
58#define TQManager_WeakRef(inst) ((TQManager_WeakRef*)(unused_noeval((inst) && &((inst)->_is_TQManager_WeakRef)), (inst)))
59
60// bool tqmanagerStart(TQManager* self, TaskQueue* tq);
61#define tqmanagerStart(self, tq) (self)->_->start(TQManager(self), TaskQueue(tq))
62// bool tqmanagerStop(TQManager* self);
63#define tqmanagerStop(self) (self)->_->stop(TQManager(self))
64// void tqmanagerNotify(TQManager* self, bool wakeup);
65#define tqmanagerNotify(self, wakeup) (self)->_->notify(TQManager(self), wakeup)
66// void tqmanagerPretask(TQManager* self);
67//
68// for in-worker managers, this is called BEFORE a task is run by the worker
69#define tqmanagerPretask(self) (self)->_->pretask(TQManager(self))
70// int64 tqmanagerTick(TQManager* self);
71#define tqmanagerTick(self) (self)->_->tick(TQManager(self))
72
#define saDeclarePtr(name)
Definition sarray.h:98
CX Object System - Object-oriented programming in C.
Shared types and configuration structures for the task queue system.