Files
foobar2000-sdk/foobar2000/SDK/system_time_keeper.h
2021-12-14 00:28:25 -07:00

48 lines
1.4 KiB
C++

namespace system_time_periods {
static const t_filetimestamp second = filetimestamp_1second_increment;
static const t_filetimestamp minute = second * 60;
static const t_filetimestamp hour = minute * 60;
static const t_filetimestamp day = hour * 24;
static const 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() : m_registered() {}
~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;
}
void on_time_changed(t_filetimestamp newVal) {}
PFC_CLASS_NOT_COPYABLE_EX(system_time_callback_impl)
private:
bool m_registered;
};