diff options
author | Roland Reichwein <mail@reichwein.it> | 2025-01-03 12:27:14 +0100 |
---|---|---|
committer | Roland Reichwein <mail@reichwein.it> | 2025-01-03 12:27:14 +0100 |
commit | 05895c86bddf50aacb3bb5e6a6bcc073965341ef (patch) | |
tree | d7627562c8ca35c8689d0a6612a2cdab2cdc4ae4 /Timer.h | |
parent | 4af400141af0c97c4e4bcd47acf78107a17eafbe (diff) |
Add first UI
Diffstat (limited to 'Timer.h')
-rw-r--r-- | Timer.h | 54 |
1 files changed, 54 insertions, 0 deletions
@@ -0,0 +1,54 @@ +#pragma once + +#include <boost/signals2.hpp> + +#include <chrono> + +using namespace std::chrono_literals; + +using clock_type = std::chrono::high_resolution_clock; + +class Timer +{ +public: + Timer(std::chrono::milliseconds interval, bool cyclic) : m_start_time(clock_type::now()), m_interval(interval), m_running(false), m_cyclic(cyclic) + {} + + // connect to this signal + boost::signals2::signal<void()> elapsed; + + void start() + { + m_running = true; + m_start_time = clock_type::now(); + } + + void stop() + { + m_running = false; + } + + bool is_elapsed() + { + return m_start_time + m_interval < clock_type::now(); + } + + void update() + { + if (m_running && is_elapsed()) { + elapsed(); + if (m_cyclic) { + start(); + } else { + stop(); + } + } + } + +private: + std::chrono::time_point<clock_type> m_start_time; + std::chrono::milliseconds m_interval; + bool m_running; + bool m_cyclic; +}; + |