mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-29 16:31:11 +02:00
CComponentsTimer: add mutex handling, use neutrino log
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <system/helpers.h>
|
#include <system/helpers.h>
|
||||||
|
#include <system/debug.h>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -39,14 +40,13 @@ CComponentsTimer::CComponentsTimer( const int& interval)
|
|||||||
{
|
{
|
||||||
tm_thread = 0;
|
tm_thread = 0;
|
||||||
tm_interval = interval;
|
tm_interval = interval;
|
||||||
if (startTimer())
|
startTimer();
|
||||||
printf("[CComponentsTimer] [%s] timer started\n", __func__);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CComponentsTimer::~CComponentsTimer()
|
CComponentsTimer::~CComponentsTimer()
|
||||||
{
|
{
|
||||||
if (stopTimer())
|
if (stopTimer())
|
||||||
printf("[CComponentsTimer] [%s] timer stopped\n", __func__);
|
dprintf(DEBUG_INFO,"[CComponentsTimer] [%s] timer stopped\n", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
//thread handle
|
//thread handle
|
||||||
@@ -59,7 +59,9 @@ void* CComponentsTimer::initTimerThread(void *arg)
|
|||||||
|
|
||||||
//start loop
|
//start loop
|
||||||
while(timer) {
|
while(timer) {
|
||||||
|
timer->mutex.lock();
|
||||||
timer->OnTimer();
|
timer->OnTimer();
|
||||||
|
timer->mutex.unlock();
|
||||||
mySleep(timer->tm_interval);
|
mySleep(timer->tm_interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,11 +76,11 @@ bool CComponentsTimer::startTimer()
|
|||||||
if(!tm_thread) {
|
if(!tm_thread) {
|
||||||
int res = pthread_create (&tm_thread, NULL, initTimerThread, ptr) ;
|
int res = pthread_create (&tm_thread, NULL, initTimerThread, ptr) ;
|
||||||
if (res != 0){
|
if (res != 0){
|
||||||
printf("[CComponentsTimer] [%s] pthread_create %s\n", __func__, strerror(errno));
|
dprintf(DEBUG_NORMAL,"[CComponentsTimer] [%s] pthread_create %s\n", __func__, strerror(errno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("[CComponentsTimer] [%s] timer thread [%lu] created with interval = %d\n", __func__, tm_thread, tm_interval);
|
dprintf(DEBUG_INFO,"[CComponentsTimer] [%s] timer thread [%lu] created with interval = %d\n", __func__, tm_thread, tm_interval);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,12 +90,12 @@ bool CComponentsTimer::stopTimer()
|
|||||||
int thres = 0;
|
int thres = 0;
|
||||||
if(tm_thread) {
|
if(tm_thread) {
|
||||||
thres = pthread_cancel(tm_thread);
|
thres = pthread_cancel(tm_thread);
|
||||||
printf("[CComponentsTimer] [%s] waiting for timer thread terminate ...\n", __func__);
|
dprintf(DEBUG_INFO,"[CComponentsTimer] [%s] waiting for timer thread terminate ...\n", __func__);
|
||||||
if (thres != 0)
|
if (thres != 0)
|
||||||
printf("[CComponentsTimer] [%s] pthread_cancel %s\n", __func__, strerror(errno));
|
dprintf(DEBUG_NORMAL,"[CComponentsTimer] [%s] pthread_cancel %s\n", __func__, strerror(errno));
|
||||||
thres = pthread_join(tm_thread, NULL);
|
thres = pthread_join(tm_thread, NULL);
|
||||||
if (thres != 0)
|
if (thres != 0)
|
||||||
printf("[CComponentsTimer] [%s] pthread_join %s\n", __func__, strerror(errno));
|
dprintf(DEBUG_NORMAL, "[CComponentsTimer] [%s] pthread_join %s\n", __func__, strerror(errno));
|
||||||
}
|
}
|
||||||
if (thres == 0){
|
if (thres == 0){
|
||||||
tm_thread = 0;
|
tm_thread = 0;
|
||||||
|
@@ -30,6 +30,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sigc++/signal.h>
|
#include <sigc++/signal.h>
|
||||||
|
#include <OpenThreads/ScopedLock>
|
||||||
|
#include <OpenThreads/Thread>
|
||||||
|
#include <OpenThreads/Condition>
|
||||||
|
|
||||||
//! Member of CComponents. Provides a generic timer class
|
//! Member of CComponents. Provides a generic timer class
|
||||||
/*!
|
/*!
|
||||||
@@ -45,6 +48,8 @@ class CComponentsTimer : public sigc::trackable
|
|||||||
int tm_interval;
|
int tm_interval;
|
||||||
///init function to start timer in own thread
|
///init function to start timer in own thread
|
||||||
static void* initTimerThread(void *arg);
|
static void* initTimerThread(void *arg);
|
||||||
|
///mutex for timer
|
||||||
|
OpenThreads::Mutex mutex;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
///class constructor, parameter interval sets the interval in seconds, default value=1 (1 sec)
|
///class constructor, parameter interval sets the interval in seconds, default value=1 (1 sec)
|
||||||
|
Reference in New Issue
Block a user