24 #include <condition_variable>
32 template<
class Signature,
class Function = std::function<Signature>>
34 typedef std::chrono::system_clock TimerClock;
37 timerName_(timerName), isThreadRun_(false), isTimerRun_(false), callback_([]{})
46 if (isThreadRun_ && timerThread_.joinable()) {
47 std::unique_lock<std::mutex> timerLock(timerGuard_);
50 condition_.notify_one();
58 void start(std::size_t seconds,
const Function& callback)
63 std::unique_lock<std::mutex> timerLock(timerGuard_);
67 timerThread_ = std::thread([&] { run(); });
71 endTS_ = TimerClock::now() + std::chrono::seconds(seconds);
74 condition_.notify_one();
80 std::unique_lock<std::mutex> timerLock(timerGuard_);
84 condition_.notify_one();
91 std::unique_lock<std::mutex> timerLock(timerGuard_);
93 while (isThreadRun_) {
95 auto now = TimerClock::now();
99 auto currentCallback = callback_;
107 condition_.wait_for(timerLock, (endTS_ - now));
110 condition_.wait(timerLock);
116 const std::string timerName_;
121 std::thread timerThread_;
122 std::condition_variable condition_;
124 std::mutex timerGuard_;
126 std::chrono::time_point<TimerClock> endTS_;
KaaTimer(const std::string &timerName)
void start(std::size_t seconds, const Function &callback)