CComponentsTimer: add slot for auto timer start/stop

Connection with OnBeforeRestart ensures closing threads.
Under certain circumstances, eg. running thread, a restart could fail.
This commit is contained in:
2014-09-26 16:46:03 +02:00
parent 8f621ef472
commit 28ef6e147e
2 changed files with 9 additions and 0 deletions

View File

@@ -40,6 +40,8 @@ CComponentsTimer::CComponentsTimer( const int& interval)
{
tm_thread = 0;
tm_interval = interval;
sl = sigc::mem_fun(*this, &CComponentsTimer::stopTimer);
startTimer();
}
@@ -81,6 +83,9 @@ bool CComponentsTimer::startTimer()
}
}
dprintf(DEBUG_INFO,"[CComponentsTimer] [%s] timer thread [%lu] created with interval = %d\n", __func__, tm_thread, tm_interval);
//ensure kill of thread on any restart of neutrino
CNeutrinoApp::getInstance()->OnBeforeRestart.connect(sl);
return true;
}
@@ -99,6 +104,8 @@ bool CComponentsTimer::stopTimer()
}
if (thres == 0){
tm_thread = 0;
//ensure disconnect of unused slot
sl.disconnect();
return true;
}

View File

@@ -50,6 +50,8 @@ class CComponentsTimer : public sigc::trackable
static void* initTimerThread(void *arg);
///mutex for timer
OpenThreads::Mutex mutex;
///slot for signals
sigc::slot0<bool> sl;
public:
///class constructor, parameter interval sets the interval in seconds, default value=1 (1 sec)