@Nico77
und die versucht nach erfolglosen ntp Zeitholen nochmal dvb zu connecten. Wenn das schief geht steht die gesammte Box.
habe was gefunden:
Das sollte sich aber nochmal ein $Kundiger anschauen, ich weiss immer noch nicht warum das noch nie ein Problem war.
Meiner Meinung nach müssten nach einer Aktualisierung der Uhrzeit in positiver Richtung alle Intervalltimer dauerhaft austimen,
da das Neusetzen des Timers nicht mit der zu dem Zeitpunkt aktuellen Zeit + intervall gemcht wird, sondern mit der alten Ablaufzeit + intervall.
correct_time hat auch nicht so funktioniert wie ich das erwartet hätte.
Eigentlich müssten alle (Intervall-)Timer correct_time aktivieren!?
Houdini
Code: Alles auswählen
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/src/driver/rcinput.cpp,v
retrieving revision 1.151
diff -u -r1.151 rcinput.cpp
--- a/driver/rcinput.cpp 19 May 2006 21:28:19 -0000 1.151
+++ b/driver/rcinput.cpp 15 Jul 2006 21:42:58 -0000
@@ -399,7 +399,6 @@
gettimeofday( &tv, NULL );
unsigned long long timeNow = (unsigned long long) tv.tv_usec + (unsigned long long)((unsigned long long) tv.tv_sec * (unsigned long long) 1000000);
-
std::vector<timer>::iterator e;
for ( e= timers.begin(); e!= timers.end(); ++e )
if ( e->times_out< timeNow+ 2000 )
@@ -409,12 +408,15 @@
if ( e->interval != 0 )
{
timer _newtimer;
- _newtimer.id= e->id;
- _newtimer.interval= e->interval;
- _newtimer.times_out= e->times_out+ e->interval;
- _newtimer.correct_time= e->correct_time;
+ _newtimer.id = e->id;
+ _newtimer.interval = e->interval;
+ _newtimer.correct_time = e->correct_time;
+ if ( _newtimer.correct_time )
+ _newtimer.times_out = timeNow + e->interval;
+ else
+ _newtimer.times_out = e->times_out + e->interval;
- timers.erase(e);
+ timers.erase(e);
for ( e= timers.begin(); e!= timers.end(); ++e )
if ( e->times_out> _newtimer.times_out )
break;
@@ -523,13 +525,13 @@
if ( timers[0].times_out< t_n )
{
timer_id = checkTimers();
- *msg = NeutrinoMessages::EVT_TIMER;
+ *msg = NeutrinoMessages::EVT_TIMER;
*data = timer_id;
return;
}
else
{
- targetTimeout = timers[0].times_out - t_n;
+ targetTimeout = timers[0].times_out - t_n;
if ( (unsigned long long) targetTimeout> Timeout)
targetTimeout= Timeout;
else
@@ -539,10 +541,10 @@
else
targetTimeout= Timeout;
- tvselect.tv_sec = targetTimeout/1000000;
+ tvselect.tv_sec = targetTimeout/1000000;
tvselect.tv_usec = targetTimeout%1000000;
//printf("InitialTimeout= %lld:%lld\n", Timeout/1000000,Timeout%1000000);
- //printf("targetTimeout= %d:%d\n", tvselect.tv_sec,tvselect.tv_usec);
+ //printf("targetTimeout= %d:%d\n", tvselect.tv_sec,tvselect.tv_usec);
FD_ZERO(&rfds);
for (int i = 0; i < NUMBER_OF_EVENT_DEVICES; i++)
Index: gui/infoviewer.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/src/gui/infoviewer.cpp,v
retrieving revision 1.198
diff -u -r1.198 infoviewer.cpp
--- a/gui/infoviewer.cpp 19 May 2006 21:28:19 -0000 1.198
+++ b/gui/infoviewer.cpp 15 Jul 2006 21:42:59 -0000
@@ -113,7 +113,7 @@
time_dot_width = g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_CHANNAME]->getRenderWidth(":");
time_width = time_left_width* 2+ time_dot_width;
- lcdUpdateTimer = g_RCInput->addTimer( LCD_UPDATE_TIME_TV_MODE, false );
+ lcdUpdateTimer = g_RCInput->addTimer( LCD_UPDATE_TIME_TV_MODE, false, true );
}
void CInfoViewer::paintTime( bool show_dot, bool firstPaint )
@@ -277,6 +277,7 @@
showIcon_16_9();
showIcon_VTXT();
}
+
info_CurrentNext = getEPG(channel_id);
if ( !( info_CurrentNext.flags & ( CSectionsdClient::epgflags::has_later | CSectionsdClient::epgflags::has_current | CSectionsdClient::epgflags::not_broadcast ) ) )
@@ -663,7 +664,7 @@
{
showLcdPercentOver();
if ( is_visible )
- show_Data( true );
+ show_Data( true );
return messages_return::handled;
}
else if ( data == sec_timer_id )