mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-31 17:31:20 +02:00
CComponentsTimer: try to fix timing on non cst hardware
On hd51 and pc hardware was observed full visual timeout progress in message boxes. Timeoout was displayed always without visible progress. This should fix this.
This commit is contained in:
@@ -55,6 +55,21 @@ CComponentsTimer::~CComponentsTimer()
|
|||||||
stopTimer();
|
stopTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CComponentsTimer::getSleep(long miliseconds)
|
||||||
|
{
|
||||||
|
struct timespec req, rem;
|
||||||
|
|
||||||
|
if(miliseconds > 999){
|
||||||
|
req.tv_sec = (time_t)(miliseconds / 1000);
|
||||||
|
req.tv_nsec = (miliseconds - ((long)req.tv_sec * 1000)) * 1000000;
|
||||||
|
}else{
|
||||||
|
req.tv_sec = 0;
|
||||||
|
req.tv_nsec = miliseconds * 1000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nanosleep(&req , &rem);
|
||||||
|
}
|
||||||
|
|
||||||
void CComponentsTimer::runSharedTimerAction()
|
void CComponentsTimer::runSharedTimerAction()
|
||||||
{
|
{
|
||||||
//start loop
|
//start loop
|
||||||
@@ -63,10 +78,18 @@ void CComponentsTimer::runSharedTimerAction()
|
|||||||
while(tm_enable && tm_interval > 0) {
|
while(tm_enable && tm_interval > 0) {
|
||||||
tm_mutex.lock();
|
tm_mutex.lock();
|
||||||
OnTimer();
|
OnTimer();
|
||||||
if (!tm_enable_nano)
|
if (!tm_enable_nano){
|
||||||
sleep(tm_interval);
|
sleep(tm_interval);
|
||||||
else
|
}else{
|
||||||
usleep((useconds_t)tm_interval);
|
//behavior is different on cst hardware
|
||||||
|
long corr_factor = 1;
|
||||||
|
#if ! HAVE_COOL_HARDWARE
|
||||||
|
corr_factor = 10;
|
||||||
|
#endif
|
||||||
|
int res = getSleep(tm_interval * corr_factor);
|
||||||
|
if (res != 0)
|
||||||
|
dprintf(DEBUG_NORMAL,"\033[33m[CComponentsTimer] [%s - %d] ERROR: returns [%d] \033[0m\n", __func__, __LINE__, res);
|
||||||
|
}
|
||||||
tm_mutex.unlock();
|
tm_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -70,6 +70,9 @@ class CComponentsTimer : public sigc::trackable
|
|||||||
OpenThreads::Mutex tm_mutex;
|
OpenThreads::Mutex tm_mutex;
|
||||||
///slot for restart signals
|
///slot for restart signals
|
||||||
sigc::slot0<bool> sl_stop_timer;
|
sigc::slot0<bool> sl_stop_timer;
|
||||||
|
|
||||||
|
///sleep generated with nanosleep
|
||||||
|
int getSleep(long miliseconds);
|
||||||
public:
|
public:
|
||||||
/**Constructor for timer class
|
/**Constructor for timer class
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user