13
0

RAII Timer Suspend wrapper

This commit is contained in:
Robin Gareus 2015-10-30 15:50:46 +01:00
parent 7abfe85498
commit 4fa564c03b
2 changed files with 27 additions and 0 deletions

View File

@ -87,6 +87,7 @@ public:
, rapid(100)
, super_rapid(40)
, fps(40)
, _suspend_counter(0)
{
#ifndef NDEBUG
second.connect (sigc::mem_fun (*this, &UITimers::on_second_timer));
@ -99,6 +100,8 @@ public:
StandardTimer super_rapid;
StandardTimer fps;
gint _suspend_counter;
#ifndef NDEBUG
std::vector<uint64_t> rapid_eps_count;
std::vector<uint64_t> super_rapid_eps_count;
@ -207,4 +210,22 @@ fps_connect(const sigc::slot<void>& slot)
return get_timers().fps.connect (slot);
}
TimerSuspender::TimerSuspender ()
{
if (g_atomic_int_add(&get_timers()._suspend_counter, 1) == 0) {
get_timers().rapid.suspend();
get_timers().super_rapid.suspend();
get_timers().fps.suspend();
}
}
TimerSuspender::~TimerSuspender ()
{
if (g_atomic_int_dec_and_test (&get_timers()._suspend_counter)) {
get_timers().rapid.resume();
get_timers().super_rapid.resume();
get_timers().fps.resume();
}
}
} // namespace Timers

View File

@ -37,6 +37,12 @@ void set_fps_interval(unsigned int interval);
sigc::connection fps_connect(const sigc::slot<void>& slot);
class TimerSuspender {
public:
TimerSuspender ();
~TimerSuspender ();
};
};
#endif // TIMERS_H