Fix rare early timeouts in Fl_Clock (STR 3516).
This is the main patch for Fl_Clock discussed in STR 3516. Although the root cause under Linux (in Fl::add_timeout()) has been fixed in a previous commit (35a3e7cc1
) early timeouts may still occur, e.g. under Windows in a Virtualbox environment. This commit revertsbab61a93d
and replaces it with the patch proposed by Manolo and further discussed in STR 3516.
This commit is contained in:
parent
35a3e7cc16
commit
3701950a90
@ -18,6 +18,8 @@ Changes in FLTK 1.4.0 Released: ??? ?? 2019
|
||||
New Features and Extensions
|
||||
|
||||
- (add new items here)
|
||||
- Fix Fl::add_timeout() under Linux (STR 3516).
|
||||
- Fix early timeouts in Fl_Clock seen in some environments (STR 3516).
|
||||
- Fl_Printer::begin_job() uses by default the Gnome print dialog on the X11
|
||||
platform when the GTK library is available at run-time. That can be turned off
|
||||
with Fl::option(OPTION_PRINTER_USES_GTK, false).
|
||||
|
@ -212,11 +212,16 @@ static void tick(void *v) {
|
||||
time_t sec;
|
||||
int usec;
|
||||
Fl::system_driver()->gettime(&sec, &usec);
|
||||
double delta = (1000000 - usec)/1000000.; // time till next second
|
||||
// if current time is just before full second, show that full second
|
||||
// and wait one more second (STR 3516)
|
||||
if (delta < 0.1) {
|
||||
delta += 1.0;
|
||||
sec++;
|
||||
}
|
||||
((Fl_Clock*)v)->value((ulong)sec);
|
||||
|
||||
// schedule timer event slightly later than the next second (+25 ms)
|
||||
// to prevent multiple timer events if triggered too early (STR 3516)
|
||||
Fl::add_timeout((1025000 - usec)/1000000., tick, v);
|
||||
Fl::add_timeout(delta, tick, v);
|
||||
}
|
||||
|
||||
int Fl_Clock::handle(int event) {
|
||||
|
Loading…
Reference in New Issue
Block a user