17 #ifndef __ETIMERPOOL_H 18 #define __ETIMERPOOL_H 21 #include <unordered_map> 42 typedef std::shared_ptr<Timer>
TimerPtr;
46 typedef std::shared_ptr<Entry>
EntryPtr;
47 typedef std::unordered_map<ULong,EntryPtr>
EntryMap;
50 class ExpirationTimeEntry;
149 Bool create(pid_t tid,
int sig);
151 Timer &setExpirationTimeEntry(ExpirationTimeEntryPtr &etep) { m_etep = etep;
return *
this; }
152 ExpirationTimeEntryPtr &getExpirationTimeEntry() {
return m_etep; }
153 Timer & clearExpirationTimeEntry() { m_etep.reset();
return *
this; }
158 timer_t getHandle() {
return m_timer; }
162 ExpirationTimeEntryPtr m_etep;
179 setDuration( ms, rounding );
185 m_duration = exptm.m_duration;
186 m_expiretime = exptm.m_expiretime;
191 m_duration = et.m_duration;
192 m_expiretime = et.m_expiretime;
196 LongLong getDuration() {
return m_duration; }
212 LongLong getExpireTime()
219 LongLong m_expiretime;
224 enum class ExpirationInfoType
231 struct ExpirationInfo
235 type = ExpirationInfoType::Unknown;
236 memset(&u, 0,
sizeof(u));
241 type = ExpirationInfoType::Queue;
242 u.queue.notify = ¬ify;
248 type = ExpirationInfoType::Callback;
253 ExpirationInfo(
const ExpirationInfo &src)
262 case ExpirationInfoType::Queue:
266 case ExpirationInfoType::Callback:
273 ExpirationInfo &operator=(
const ExpirationInfo &info)
278 case ExpirationInfoType::Queue:
279 u.queue.notify = info.u.queue.notify;
280 u.queue.msg = info.u.queue.msg;
282 case ExpirationInfoType::Callback:
283 u.cb.func = info.u.cb.func;
284 u.cb.data = info.u.cb.data;
287 memcpy(&u, &info.u,
sizeof(u));
294 ExpirationInfo &clear()
296 type = ExpirationInfoType::Unknown;
297 memset(&u, 0,
sizeof(u));
301 ExpirationInfoType type;
302 union ExpirationInfoUnion
306 _EThreadEventNotification *notify;
320 Entry(ULong
id,
ExpirationTime &exptm,
const ExpirationInfo &info)
326 Entry(
const Entry &e)
328 m_exptm( e.m_exptm ),
333 ULong getId() {
return m_id; }
334 ExpirationInfo &getExpirationInfo() {
return m_info; }
344 ExpirationInfo m_info;
347 class ExpirationTimeEntry
350 ExpirationTimeEntry(LongLong expiretime)
351 : m_expiretime( expiretime )
355 LongLong getExpireTime() {
return m_expiretime; }
356 ExpirationTimeEntry &setExpireTime(LongLong exp) { m_expiretime = exp;
return *
this; }
358 ExpirationTimeEntry &addEntry(EntryPtr &ep)
360 m_map[ep->getId()] = ep;
364 Void removeEntry(ULong
id)
369 Bool isEntryMapEmpty()
371 return m_map.empty();
374 ExpirationTimeEntry &setTimer(TimerPtr &tp)
385 EntryMap &getEntryMap()
390 ExpirationTimeEntry ¬ify()
392 for (
auto it = m_map.begin(); it != m_map.end();)
395 it->second->notify();
398 it = m_map.erase( it );
405 ExpirationTimeEntry();
406 LongLong m_expiretime;
418 pid_t getThreadId() {
return m_tid; }
422 Dword threadProc(Void *arg);
435 Void sendNotifications(ExpirationTimeEntryPtr &etep);
442 ULong _registerTimer(LongLong ms,
const ETimerPool::ExpirationInfo &info);
443 ULong assignNextId();
447 std::atomic<ULong> m_nextid;
451 LongLong m_resolution;
452 ExpirationTimeEntryMap m_etmap;
453 ExpirationTimeEntryIdMap m_etidmap;
454 TimerPtrList m_freetimers;
458 #endif // #define __ETIMERPOOL_H std::unordered_map< ULong, ExpirationTimeEntryPtr > ExpirationTimeEntryIdMap
Definition: etimerpool.h:53
ETimerPool & setRounding(Rounding r)
Assigns the timer rounding method.
Definition: etimerpool.h:103
Definition: etimerpool.h:37
#define True
True.
Definition: ebase.h:25
ETimerPool & setTimerSignal(Int sig)
Assigns the timer signal value.
Definition: etimerpool.h:107
ETimerPool & setResolution(LongLong ms)
Assigns the timer resolution value.
Definition: etimerpool.h:99
The event message base class.
Definition: etevent.h:203
Void init()
Initializes the ETimerPool.
Void dump()
Prints the contents of the internal collections.
Provides class for manipulating time of day values.
DECLARE_ERROR_ADVANCED(ETimerPoolError_CreatingTimer)
ETimerPool()
Default constructor.
Definition: etimerpool.cpp:54
Void(* ETimerPoolExpirationCallback)(ULong timerid, pVoid data)
Defines the timer expiration callback function.
Definition: etimerpool.h:35
static ETimerPool & Instance()
Retrieves the single instance of the ETimerPool object.
Definition: etimerpool.h:70
#define False
False.
Definition: ebase.h:27
Int getQuitSignal()
Retrieves the current quit signal value.
Definition: etimerpool.h:94
Class for manipulating date and time of day values.
Definition: etime.h:199
Rounding
Defines how rounding will be performed.
Definition: etimerpool.h:60
std::shared_ptr< Timer > TimerPtr
Definition: etimerpool.h:41
std::shared_ptr< ExpirationTimeEntry > ExpirationTimeEntryPtr
Definition: etimerpool.h:50
Void uninit(Bool dumpit=False)
Uninitializes the ETimerPool.
std::list< TimerPtr > TimerPtrList
Definition: etimerpool.h:43
An abstract class that represents contains the threadProc() that will be run in a separate thread...
Definition: etbasic.h:53
ETimerPool & setQuitSignal(Int sig)
Assigns the quit signal value.
Definition: etimerpool.h:111
ETimerPool & unregisterTimer(ULong timerid)
Unregisters an expiration timer.
Definition: etimerpool.cpp:143
ULong registerTimer(LongLong ms, _EThreadEventMessageBase *msg, _EThreadEventNotification ¬ify)
Registers an expiration timer.
Definition: etimerpool.cpp:68
std::shared_ptr< Entry > EntryPtr
Definition: etimerpool.h:45
std::unordered_map< ULong, EntryPtr > EntryMap
Definition: etimerpool.h:47
friend ExpirationTime
Definition: etimerpool.h:55
LongLong getResolution(Bool raw=False)
Retrieves the current timer resolution value.
Definition: etimerpool.h:85
Int getTimerSignal()
Retrieves the current timer signal value.
Definition: etimerpool.h:91
A private mutex (the mutex data is allocated from either the heap or stack).
Definition: esynch.h:175
Rounding getRounding()
Retrieves the current rounding value.
Definition: etimerpool.h:88
std::unordered_map< LongLong, ExpirationTimeEntryPtr > ExpirationTimeEntryMap
Definition: etimerpool.h:52
const timeval & getTimeVal() const
Retrieves a reference to the timeval structure.
Definition: etime.h:446
Contains definitions for synchronization objects.
~ETimerPool()
Class destructor.
Definition: etimerpool.cpp:64