diff options
author | Robin Gareus <robin@gareus.org> | 2015-10-30 15:50:46 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-10-30 15:55:27 +0100 |
commit | 4fa564c03b8839615753d120c127639ee7f02241 (patch) | |
tree | fc5f3996001749d6d0c8236238ef99ad6932b266 /gtk2_ardour/timers.cc | |
parent | 7abfe85498080f202b19e02744df1e5352a06ce0 (diff) |
RAII Timer Suspend wrapper
Diffstat (limited to 'gtk2_ardour/timers.cc')
-rw-r--r-- | gtk2_ardour/timers.cc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gtk2_ardour/timers.cc b/gtk2_ardour/timers.cc index 13f2cfdbd7..3469d39df8 100644 --- a/gtk2_ardour/timers.cc +++ b/gtk2_ardour/timers.cc @@ -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 |