LibCore: Add CTimer::restart() and make set_interval() take effect soon.

This commit is contained in:
Andreas Kling 2019-04-18 04:38:04 +02:00
parent a747a10eab
commit d73ed74d1c
Notes: sideshowbarker 2024-07-19 14:40:11 +09:00
2 changed files with 23 additions and 1 deletions

View file

@ -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();
}

View file

@ -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 };
};