12#include <sys/timerfd.h>
20#include <condition_variable>
139 std::condition_variable cv_;
142 unsigned int timerID_;
148 std::atomic<uint64_t> tickCount_;
151 std::atomic<uint64_t> cycleCount_;
154 std::atomic<uint64_t> prevTickCount_;
157 std::atomic<uint64_t> cycleMissedTickCount_;
163 std::chrono::steady_clock::time_point lastWaitTime_{};
166 std::atomic<int64_t> waitIntervalUs_{0};
182 MainTimer(
const MainTimer&) =
delete;
185 MainTimer& operator=(
const MainTimer&) =
delete;
199 static void CALLBACK TimerCallback(
unsigned int uID,
unsigned int uMsg,
200 DWORD_PTR dwUser, DWORD_PTR dw1,
208 std::thread timerThread_;
211 std::atomic<bool> timerRunning_{
false};
282 std::atomic<uint64_t> tickCount_;
285 std::atomic<uint64_t> refTickCount_;
288 std::atomic<uint64_t> cycleCount_;
void wait()
Waits for the next timer tick and updates internal state.
Definition timer.cc:153
MainTimerListener()
Constructs a new MainTimerListener instance.
Definition timer.cc:145
uint64_t getCycleCount() const
Returns the number of completed wait cycles.
Definition timer.cc:193
uint64_t getTickCount() const
Returns the number of ticks since the first tick received.
Definition timer.cc:191
int64_t getElapsedTime() const
Returns the total elapsed time since the listener was created.
Definition timer.cc:195
uint64_t getCycleMissedTickCount() const
Returns the number of missed timer ticks in the current cycle.
Definition timer.cc:132
static void notifyAllListeners()
Notifies all listeners (waiting threads) about a timer tick.
Definition timer.cc:15
static std::mutex listenerMx
Static mutex protecting the static condition variable for notifying all listener threads.
Definition timer.h:51
int64_t getElapsedTime() const
Returns the total elapsed time since the timer started.
Definition timer.cc:136
uint64_t getTickCount() const
Returns the current tick count.
Definition timer.cc:128
static MainTimer & getInstance()
Returns the singleton instance of the MainTimer.
Definition timer.cc:10
int64_t getWaitIntervalUs() const
Returns the interval in microseconds between two consecutive wait() calls.
Definition timer.cc:143
static unsigned int DELAY_MS
Static delay in milliseconds between each timer tick.
Definition timer.h:41
void wait()
Waits for the next timer tick to occur.
Definition timer.cc:86
static std::condition_variable listenerCv
Static condition variable used to notify all listener threads of timer ticks.
Definition timer.h:61
uint64_t getCycleCount() const
Returns the number of completed wait cycles.
Definition timer.cc:130