From fc538b20128c3cb9d3aeac6a3e551d106c7de68c Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 20 Oct 2016 23:49:09 +0200 Subject: [PATCH] CComponentsTimer: add support for nano seconds To enable nano mode, parameter is_nano must set to true. Origin commit data ------------------ Commit: https://github.com/neutrino-images/ni-neutrino/commit/d0dd14040f6b3f8084ff5deeb669a65a7032aa4b Author: Thilo Graf Date: 2016-10-20 (Thu, 20 Oct 2016) --- src/gui/components/cc_timer.cpp | 15 ++++++++++----- src/gui/components/cc_timer.h | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/gui/components/cc_timer.cpp b/src/gui/components/cc_timer.cpp index 966d0bcc2..9c8b1aa7b 100644 --- a/src/gui/components/cc_timer.cpp +++ b/src/gui/components/cc_timer.cpp @@ -36,10 +36,11 @@ using namespace std; -CComponentsTimer::CComponentsTimer(const int& interval) +CComponentsTimer::CComponentsTimer(const int& interval, bool is_nano) { tm_thread = 0; tm_interval = interval; + tm_enable_nano = is_nano; sl_stop_timer = sigc::mem_fun(*this, &CComponentsTimer::stopTimer); @@ -59,7 +60,10 @@ void CComponentsTimer::runSharedTimerAction() while(tm_enable && tm_interval > 0) { tm_mutex.lock(); OnTimer(); - mySleep(tm_interval); + if (!tm_enable_nano) + mySleep(tm_interval); + else + usleep((useconds_t)tm_interval); tm_mutex.unlock(); } @@ -142,10 +146,11 @@ bool CComponentsTimer::stopTimer() return false; } -void CComponentsTimer::setTimerInterval(const int& seconds) +void CComponentsTimer::setTimerInterval(const int& interval, bool is_nano) { - if (tm_interval == seconds) + if (tm_interval == interval && tm_enable_nano == is_nano) return; - tm_interval = seconds; + tm_enable_nano = is_nano; + tm_interval = interval; } diff --git a/src/gui/components/cc_timer.h b/src/gui/components/cc_timer.h index a653889c3..530224f40 100644 --- a/src/gui/components/cc_timer.h +++ b/src/gui/components/cc_timer.h @@ -47,6 +47,8 @@ class CComponentsTimer : public sigc::trackable ///refresh interval in seconds int tm_interval; + + bool tm_enable_nano; ///init function to init shared timer action static void* initThreadAction(void *arg); @@ -71,10 +73,12 @@ class CComponentsTimer : public sigc::trackable * @param[in] interval * @li int interval in seconds, default value=1 (1 sec) * If init value for interval > 0, timer starts immediately + * @li bool default = false as seconds mode, true = nano seconds mode * @see * setTimerInterval(); */ - CComponentsTimer(const int& interval = 1); + CComponentsTimer(const int& interval = 1, bool is_nano = false); + ~CComponentsTimer(); /**Starts timer thread @@ -105,15 +109,16 @@ class CComponentsTimer : public sigc::trackable */ bool isRun() const {return tm_thread;}; - /**set interval in seconds - * @param[in] seconds - * @li int + /**set timer interval + * @param[in] interval + * @li int default interval in seconds, if second parameter = true interval is used as nano seconds + * @li bool default = false as seconds mode, true = nano seconds mode * @return * void * @see * tm_interval */ - void setTimerInterval(const int& seconds); + void setTimerInterval(const int& interval, bool is_nano = false); /**Provides a signal handler to receive any function or methode. * Use this in your class where ever you need time controled actions.