acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
timer.h
1// Deep Refactoring timer_handler by camilo on 2026-05-28 10:33 <3ThomasBorregaardSørensen!! Mummi!! Bilbo
2#pragma once
3
4
5//#include "timer.h"
6//#include "timer_array.h"
7//#include "acme/parallelization/task.h"
8#include "acme/constant/timer.h"
9
10
11DECLARE_ENUMERATION(e_timer, enum_timer);
12
13
14class timer :
15 virtual public ::timer_callback::base,
16 virtual public ::particle
17{
18public:
19
20
21 ::pointer<::timer_handler> m_ptimerhandler;
22 ::pointer<::timer_dispatch> m_ptimerdispatch;
23 ::e_timer m_etimer;
24 class ::time m_time;
25 ::timer_callback m_callback;
26 class ::time m_timeStart;
27 ::i64 m_iCall = 0;
28 bool m_bRet = false;
29 ::pointer < ::particle > m_pcarrier1;
30
31
32 void cancel(){m_bRet=true;}
33
34 void restart() { m_timeStart.Now(); }
35
36 bool should_call() const { return m_timeStart.elapsed() >= m_time; }
37
38 void operator()(::timer *ptimer) override
39 {
40
41 m_iCall++;
42
43 if (m_callback)
44 {
45
46 m_callback(ptimer);
47
48 }
49
50 }
51
52
53};
54
55
57
58
59using timer_dispatch_map = ::map<::timer_dispatch *, ::timer_map >;
60
61
65class CLASS_DECL_ACME timer_handler :
66 virtual public ::particle
67{
68public:
69
70
71 class ::time m_timeResolution;
72 ::timer_dispatch_map m_timermap;
73
74 //::pointer < manual_reset_happening > m_pmanualresethappeningWait;
75
76 //::pointer<::acme::timer_array> m_ptimera;
77 //PFN_TIMER m_pfnTimer;
78 //void * m_pvoidData;
79 //::procedure m_procedure;
80 //bool m_bRunning;
81
82 //
83 //#ifdef UNIVERSAL_WINDOWS
84 //
85 //
86 // ThreadPoolTimer ^ m_timer;
87 // timer * m_ptimer;
88 //
89 //#elif defined(WINDOWS)
90 //
91 // HANDLE m_hTimerQueue;
92 // HANDLE m_hTimer;
93 //
94 //#elif defined(__APPLE__)
95 //
96 // void * m_timer;
97 // void * m_queue;
98 //
99 //#else
100
101 //bool m_bInit;
102 //e_timer_t m_timerid;
103 //struct sigevent m_sev;
104 //struct itimerspec m_its;
105
106//#endif
107
108
109
110 timer_handler();
111 ~timer_handler() override;
112
113
114 //void on_initialize_particle() override;
115
116
117 virtual ::timer * add_timer(::timer_dispatch * ptimerdispatch, const ::e_timer & etimer, const class ::time & time, const ::timer_callback &callback);
118 virtual void erase_timer(::timer_dispatch * ptimerdispatch, const ::e_timer & etimer);
119 //virtual void add_timer_dispatch(::timer_dispatch * ptimerdispatch);
120 virtual void erase_timer_dispatch(::timer_dispatch * ptimerdispatch);
121 //virtual void erase_key_particle(::particle * pparticleKey);
122
123 bool are_there_timers_to_handle() const {return m_timermap.count() > 0;}
124
125 virtual void on_start_timers_handling_hint();
126 virtual void on_stop_timers_handling_hint();
127 //void impl_init();
128 //void impl_term();
129
130
131 //virtual void initialize_timer(::particle* pparticle, ::acme::timer_array* ptimera, uptr uiTimer = 0, const ::timer_callback & callback = {}, ::particle* pparticleSynchronization = nullptr);
132
133 virtual void handle_timers();
134
135 virtual void _handle_timers(::timer_map * ptimermap);
136
137
138
139
140 //virtual void start_timer_handler(const class time & timeWait, bool bPeriodic);
141
142
143 //virtual void on_timer();
144
145 //virtual void destroy() override;
146
147 //virtual void stop_timer_handler();
148
152 //void term_task() override;
153
154 //inline bool is_timer_ok() const { return is_ok(); }
155
156
157 //bool is_task_set() const override;
158
159
160};
161
162
163//class CLASS_DECL_ACME timer_notify_sink :
164class CLASS_DECL_ACME timer_dispatch :
165 virtual public ::timer_callback::base,
166 virtual public ::particle
167{
168public:
169
170
171 ::pointer < ::timer_map > m_ptimermap;
172 ::pointer_array<::timer_handler> m_timerhandlera;
173
174
175 timer_dispatch();
176 ~timer_dispatch() override;
177
178
179 virtual ::timer_map * get_timer_map();
180
181 virtual ::timer_handler * get_timer_handler(const class ::time &time);
182 //virtual void add_timer_dispatch(const ::e_timer & etimer, const class ::time & time, const ::timer_callback &callback);
183 //virtual void erase_timer(const ::e_timer & etimer);
184 //virtual void erase_key_particle(::particle * pparticleKey);
185
186 bool are_there_timers_to_handle() const {return m_ptimermap && m_ptimermap->count() >0;}
187
188 virtual ::timer * set_timer(const ::e_timer & etimer, const class ::time &time, const ::timer_callback &callback = {},
189 ::timer_handler *ptimerhandler = nullptr);
190 virtual void kill_timer(const ::e_timer & etimer);
191
192 virtual ::comparable_array_base < ::e_timer > all_timers_ids();
193
194 virtual void erase_all_timers();
195
196 virtual void erase_timers(const ::comparable_array_base < ::e_timer > & etimera);
197
198
199
200};
201
Definition pointer_container.h:83
Definition particle.h:95
Definition pointer_array.h:1882
Definition aaa_time.h:13
Definition timer.h:167
Definition timer.h:67
Definition aaa_timer.h:9