Mercurial > foo_out_sdl
diff foosdk/sdk/foobar2000/SDK/system_time_keeper.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/foobar2000/SDK/system_time_keeper.h Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,50 @@ +#pragma once + +namespace system_time_periods { + static constexpr t_filetimestamp second = filetimestamp_1second_increment; + static constexpr t_filetimestamp minute = second * 60; + static constexpr t_filetimestamp hour = minute * 60; + static constexpr t_filetimestamp day = hour * 24; + static constexpr t_filetimestamp week = day * 7; +}; +class system_time_callback { +public: + virtual void on_time_changed(t_filetimestamp newVal) = 0; +}; +//! \since 0.9.6 +class system_time_keeper : public service_base { +public: + //! The callback object receives an on_changed() call with the current time inside the register_callback() call. + virtual void register_callback(system_time_callback * callback, t_filetimestamp resolution) = 0; + + virtual void unregister_callback(system_time_callback * callback) = 0; + + FB2K_MAKE_SERVICE_COREAPI(system_time_keeper) +}; + +class system_time_callback_impl : public system_time_callback { +public: + system_time_callback_impl() {} + ~system_time_callback_impl() {stop_timer();} + + void stop_timer() { + if (m_registered) { + system_time_keeper::get()->unregister_callback(this); + m_registered = false; + } + } + //! You get a on_changed() call inside the initialize_timer() call. + void initialize_timer(t_filetimestamp period) { + stop_timer(); + system_time_keeper::get()->register_callback(this, period); + m_registered = true; + } + + //! Override me + void on_time_changed(t_filetimestamp) override {} + + PFC_CLASS_NOT_COPYABLE_EX(system_time_callback_impl) +private: + bool m_registered = false; +}; +
