From d73ed74d1cf4537cbca78a7de0326f722323f94c Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Thu, 18 Apr 2019 04:38:04 +0200 Subject: [PATCH] LibCore: Add CTimer::restart() and make set_interval() take effect soon. --- LibCore/CTimer.cpp | 14 ++++++++++++++ LibCore/CTimer.h | 10 +++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/LibCore/CTimer.cpp b/LibCore/CTimer.cpp index cb479a1d187..fb55ad7e632 100644 --- a/LibCore/CTimer.cpp +++ b/LibCore/CTimer.cpp @@ -30,6 +30,13 @@ void CTimer::start(int interval) m_active = true; } +void CTimer::restart(int interval) +{ + if (m_active) + stop(); + start(interval); +} + void CTimer::stop() { if (!m_active) @@ -42,6 +49,13 @@ void CTimer::timer_event(CTimerEvent&) { if (m_single_shot) stop(); + else { + if (m_interval_dirty) { + stop(); + start(m_interval); + } + } + if (on_timeout) on_timeout(); } diff --git a/LibCore/CTimer.h b/LibCore/CTimer.h index 736b8c17e50..4d0507512fc 100644 --- a/LibCore/CTimer.h +++ b/LibCore/CTimer.h @@ -11,11 +11,18 @@ public: void start(); void start(int interval); + void restart(int interval); void stop(); bool is_active() const { return m_active; } int interval() const { return m_interval; } - void set_interval(int interval) { m_interval = interval; } + void set_interval(int interval) + { + if (m_interval == interval) + return; + m_interval = interval; + m_interval_dirty = true; + } bool is_single_shot() const { return m_single_shot; } void set_single_shot(bool single_shot) { m_single_shot = single_shot; } @@ -29,5 +36,6 @@ private: bool m_active { false }; bool m_single_shot { false }; + bool m_interval_dirty { false }; int m_interval { 0 }; };