/* Based up Neutrino-GUI - Tuxbox-Project Copyright (C) 2001 by Steffen Hehn 'McClean' Classes for generic GUI-related components. Copyright (C) 2013-2019, Thilo Graf 'dbt' License: GPL This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef __CC_TIMER__ #define __CC_TIMER__ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include /**CComponentsTimer * Member of CComponents. Provides a generic timer class * @see * CComponentsTimer() */ class CComponentsTimer : public sigc::trackable { private: ///thread std::thread *tm_thread; std::mutex tm_mutex; ///flag to control thread state bool tm_enable; ///refresh interval in seconds int64_t tm_interval; ///init function to start/stop timer in own thread void initThread(); void stopThread(); ///runs shared timer action provided inside OnTimer() signal static void threadCallback(CComponentsTimer *tm); sigc::slot sl_cleanup_timer; ///name for the thread std::string tm_thread_name; std::string tn; public: /**Constructor for timer class * * @param[in] interval * @li int64_t interval in miliseconds, default value=1000 ms (1 sec) * @see * setTimerInterval(); */ CComponentsTimer(const int64_t& interval = 1000); ~CComponentsTimer(); /**Acivate timer * @see * stopTimer() */ void startTimer(); /**Disable timer * @see * startTimer() */ void stopTimer(); /**Cancel timer thread * @see * stopTimer() */ void cancelTimerThread(){stopThread();} /**get current timer status * @return * bool * returns true, if timer is active * @see * startTimer() * stopTimer() */ bool isRun() const; /**set timer interval * @param[in] interval * @li int64_t default interval in miliseconds * @return * void * @see * tm_interval */ void setTimerInterval(const int64_t& interval); /**set thread name * @param[in] thread name * @return * void */ void setThreadName(const std::string& n) { tm_thread_name = tn = n; } /**Provides a signal handler to receive any function or methode. * Use this in your class where ever you need time controled actions. * * @param[in] seconds * @li int * @see * CComponentsSignals for similar handlings. * CComponentsFrmClock::startClock() */ sigc::signal OnTimer; }; #endif