EpcTools
An event based multi-threaded C++ development framework.
|
Go to the documentation of this file.
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);
153 Timer & clearExpirationTimeEntry() { m_etep.reset();
return *
this; }
158 timer_t getHandle() {
return m_timer; }
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::Thread;
242 u.thrd.thread = &thread;
248 type = ExpirationInfoType::Callback;
253 ExpirationInfo(
const ExpirationInfo &src)
262 case ExpirationInfoType::Thread:
266 case ExpirationInfoType::Callback:
273 ExpirationInfo &operator=(
const ExpirationInfo &info)
278 case ExpirationInfoType::Thread:
279 u.thrd.thread = info.u.thrd.thread;
280 u.thrd.msg = info.u.thrd.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
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)
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);
442 ULong _registerTimer(LongLong ms,
const ETimerPool::ExpirationInfo &info);
443 ULong assignNextId();
447 std::atomic<ULong> m_nextid;
451 LongLong m_resolution;
458 #endif // #define __ETIMERPOOL_H
std::unordered_map< ULong, EntryPtr > EntryMap
Definition: etimerpool.h:47
Int getQuitSignal()
Retrieves the current quit signal value.
Definition: etimerpool.h:94
ETimerPool()
Default constructor.
Definition: etimerpool.cpp:54
Class for manipulating date and time of day values.
Definition: etime.h:199
std::unordered_map< LongLong, ExpirationTimeEntryPtr > ExpirationTimeEntryMap
Definition: etimerpool.h:52
std::shared_ptr< ExpirationTimeEntry > ExpirationTimeEntryPtr
Definition: etimerpool.h:50
#define True
True.
Definition: ebase.h:25
Void uninit(Bool dumpit=False)
Uninitializes the ETimerPool.
std::list< TimerPtr > TimerPtrList
Definition: etimerpool.h:43
DECLARE_ERROR_ADVANCED(ETimerPoolError_CreatingTimer)
Definition: etevent.h:833
A private mutex (the mutex data is allocated from either the heap or stack).
Definition: esynch.h:175
ETimerPool & setQuitSignal(Int sig)
Assigns the quit signal value.
Definition: etimerpool.h:111
Contains definitions for synchronization objects.
Void(* ETimerPoolExpirationCallback)(ULong timerid, pVoid data)
Defines the timer expiration callback function.
Definition: etimerpool.h:35
std::unordered_map< ULong, ExpirationTimeEntryPtr > ExpirationTimeEntryIdMap
Definition: etimerpool.h:53
friend ExpirationTime
Definition: etimerpool.h:55
ETimerPool & unregisterTimer(ULong timerid)
Unregisters an expiration timer.
Definition: etimerpool.cpp:143
Provides class for manipulating time of day values.
ETimerPool & setResolution(LongLong ms)
Assigns the timer resolution value.
Definition: etimerpool.h:99
#define False
False.
Definition: ebase.h:27
Int getTimerSignal()
Retrieves the current timer signal value.
Definition: etimerpool.h:91
Void dump()
Prints the contents of the internal collections.
LongLong getResolution(Bool raw=False)
Retrieves the current timer resolution value.
Definition: etimerpool.h:85
const timeval & getTimeVal()
Retrieves a reference to the timeval structure.
Definition: etime.h:446
Rounding getRounding()
Retrieves the current rounding value.
Definition: etimerpool.h:88
~ETimerPool()
Class destructor.
Definition: etimerpool.cpp:64
static ETimerPool & Instance()
Retrieves the single instance of the ETimerPool object.
Definition: etimerpool.h:70
The event message base class.
Definition: etevent.h:197
Definition: etimerpool.h:37
An abstract class that represents contains the threadProc() that will be run in a separate thread.
Definition: etbasic.h:53
ETimerPool & setTimerSignal(Int sig)
Assigns the timer signal value.
Definition: etimerpool.h:107
ETimerPool & setRounding(Rounding r)
Assigns the timer rounding method.
Definition: etimerpool.h:103
Rounding
Defines how rounding will be performed.
Definition: etimerpool.h:60
std::shared_ptr< Timer > TimerPtr
Definition: etimerpool.h:41
ULong registerTimer(LongLong ms, _EThreadEventMessageBase *msg, _EThreadEventBase &thread)
Registers an expiration timer.
Definition: etimerpool.cpp:68
Void init()
Initializes the ETimerPool.
std::shared_ptr< Entry > EntryPtr
Definition: etimerpool.h:45