Matthew Garrett ([personal profile] mjg59) wrote,
@ 2011-11-17 08:39 am UTC
Entry tags:advogato, fedora
A reasonably common design for applications that want to run code at a specific time is something like:

time_t wakeup_time = get_next_event_time();
time_t now = time(NULL);
sleep(wakeup_time-now);

This works absolutely fine, except that sleep() ignores time spent with a suspended system. If you sleep(3600) and then immediately suspend for 45 minutes you'll wake up after 105 minutes, not 60. Which probably isn't what you want. If you want a timer that'll expire at a specific time (or immediately after resume if that time passed during suspend), use the POSIX timer family (timer_create, timer_settime and friends) with CLOCK_REALTIME. It's a signal-driven interface rather than a blocking one, so implementation may be a little more complicated, but it has the advantage of actually working.


(Read 19 comments) - (Post a new comment)
(Threaded) (Flat)


(Anonymous)
2011-11-17 02:17 pm UTC (link)
Just out of interest: Why did nobody fix sleep() instead?

(Reply to this)  (Thread)  (Show 8 comments)



(Read 19 comments) - (Post a new comment)
(Threaded) (Flat)