On Wednesday 20 May 2015 18:25:28 you wrote: > The most compatible/conceptually simple solution would be to simply have > a one-minute timer or so and check for the interval yourself, which might > also simplify the interval check when it is in local time. One minute is > roughly the accuracy with which time jumps are detected.
Hmm, time jumps will only be the exception that I want to catch if they happen. I still want to trigger on entering the interval as soon as possible, so to have a second watcher, a timer watcher in addition to the periodic is a bit ugly in my opinion. > A more advanced technique would be to run a periodic watcher in manual > reschedule mode. In that mode, a callback will be invoked whenever a time > jump is detected (teh callback is very limited in what it can do, check > the docs). Oh. I didn't realize the reschedule callback for periodics is invoked every time libev() detects a time jump, forwards or backwards. This was not immediately clear to me from the documentation, which only says: "The current reschedule callback, or 0, if this functionality is switched off. Can be changed any time, but changes only take effect when the periodic timer fires or ev_periodic_again is being called." As a user I was oblivious to the fact that rescheduling in this context means libev internal rescheduling of when to invoke the periodic watcher; as opposed to a "user triggered" rescheduling like via ev_periodic_set() ev_periodic_again() or when the periodic itself fires. > Some experimenting might be required, as the reschedule callback will > likely get invoked before your callback is called (its not really > documented when it is invoked), so you might have to cope with multiple > invocations (or too few), but in general, you should be able to cope with > manual reschedule mode. Yes, excellent. I can work with this. Just out of curiosity, from my first email: > > I guess in the latter case, I will need to detect a time jump backwards > > by, for instance, comparing the return value of ev_now() with the return > > value of ev_now() from a previous event loop iteration in an ev_check > > watcher. could this method still be used to detect jumps backwards (assuming the time until an event triggers the next event loop iteration won't cancel out this jump backwards)? Another question: Assuming it is now 09:00 I start a periodic to fire at 10:00 then I set system time to 11:00 I guess there's not really a way to wake up poll() on a system time jump, and on this jump the periodics still need to be rescheduled. You said something about a 60sec accuracy of libev for detecting time jumps. Is there some internal ev_timer watcher waking up the event loop every 60sec to catch this? -- Best regards, Thilo Schulz _______________________________________________ libev mailing list [email protected] http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev
