ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.pod
(Generate patch)

Comparing libev/ev.pod (file contents):
Revision 1.381 by root, Sat Aug 13 17:41:14 2011 UTC vs.
Revision 1.384 by sf-exg, Sun Oct 16 11:02:57 2011 UTC

174=item ev_tstamp ev_time () 174=item ev_tstamp ev_time ()
175 175
176Returns the current time as libev would use it. Please note that the 176Returns the current time as libev would use it. Please note that the
177C<ev_now> function is usually faster and also often returns the timestamp 177C<ev_now> function is usually faster and also often returns the timestamp
178you actually want to know. Also interesting is the combination of 178you actually want to know. Also interesting is the combination of
179C<ev_update_now> and C<ev_now>. 179C<ev_now_update> and C<ev_now>.
180 180
181=item ev_sleep (ev_tstamp interval) 181=item ev_sleep (ev_tstamp interval)
182 182
183Sleep for the given interval: The current thread will be blocked 183Sleep for the given interval: The current thread will be blocked
184until either it is interrupted or the given time interval has 184until either it is interrupted or the given time interval has
1961cannot be guaranteed to infinite precision. Less obviously, it cannot be 1961cannot be guaranteed to infinite precision. Less obviously, it cannot be
1962guaranteed to any precision by libev - imagine somebody suspending the 1962guaranteed to any precision by libev - imagine somebody suspending the
1963process a STOP signal for a few hours for example. 1963process a STOP signal for a few hours for example.
1964 1964
1965So, libev tries to invoke your callback as soon as possible I<after> the 1965So, libev tries to invoke your callback as soon as possible I<after> the
1966delay has occured, but cannot guarantee this. 1966delay has occurred, but cannot guarantee this.
1967 1967
1968A less obvious failure mode is calling your callback too early: many event 1968A less obvious failure mode is calling your callback too early: many event
1969loops compare timestamps with a "elapsed delay >= requested delay", but 1969loops compare timestamps with a "elapsed delay >= requested delay", but
1970this can cause your callback to be invoked much earlier than you would 1970this can cause your callback to be invoked much earlier than you would
1971expect. 1971expect.
1991delay has actually elapsed, or in other words, it always errs on the "too 1991delay has actually elapsed, or in other words, it always errs on the "too
1992late" side of things. 1992late" side of things.
1993 1993
1994=head3 The special problem of time updates 1994=head3 The special problem of time updates
1995 1995
1996Establishing the current time is a costly operation (it usually takes at 1996Establishing the current time is a costly operation (it usually takes
1997least two system calls): EV therefore updates its idea of the current 1997at least one system call): EV therefore updates its idea of the current
1998time only before and after C<ev_run> collects new events, which causes a 1998time only before and after C<ev_run> collects new events, which causes a
1999growing difference between C<ev_now ()> and C<ev_time ()> when handling 1999growing difference between C<ev_now ()> and C<ev_time ()> when handling
2000lots of events in one iteration. 2000lots of events in one iteration.
2001 2001
2002The relative timeouts are calculated relative to the C<ev_now ()> 2002The relative timeouts are calculated relative to the C<ev_now ()>
2009 2009
2010If the event loop is suspended for a long time, you can also force an 2010If the event loop is suspended for a long time, you can also force an
2011update of the time returned by C<ev_now ()> by calling C<ev_now_update 2011update of the time returned by C<ev_now ()> by calling C<ev_now_update
2012()>. 2012()>.
2013 2013
2014=head3 The special problem of unsychronised clocks 2014=head3 The special problem of unsynchronised clocks
2015 2015
2016Modern systems have a variety of clocks - libev itself uses the normal 2016Modern systems have a variety of clocks - libev itself uses the normal
2017"wall clock" clock and, if available, the monotonic clock (to avoid time 2017"wall clock" clock and, if available, the monotonic clock (to avoid time
2018jumps). 2018jumps).
2019 2019
2023a call to C<gettimeofday> might return a second count that is one higher 2023a call to C<gettimeofday> might return a second count that is one higher
2024than a directly following call to C<time>. 2024than a directly following call to C<time>.
2025 2025
2026The moral of this is to only compare libev-related timestamps with 2026The moral of this is to only compare libev-related timestamps with
2027C<ev_time ()> and C<ev_now ()>, at least if you want better precision than 2027C<ev_time ()> and C<ev_now ()>, at least if you want better precision than
2028a seocnd or so. 2028a second or so.
2029 2029
2030One more problem arises due to this lack of synchronisation: if libev uses 2030One more problem arises due to this lack of synchronisation: if libev uses
2031the system monotonic clock and you compare timestamps from C<ev_time> 2031the system monotonic clock and you compare timestamps from C<ev_time>
2032or C<ev_now> from when you started your timer and when your callback is 2032or C<ev_now> from when you started your timer and when your callback is
2033invoked, you will find that sometimes the callback is a bit "early". 2033invoked, you will find that sometimes the callback is a bit "early".
5132good enough for at least into the year 4000 with millisecond accuracy 5132good enough for at least into the year 4000 with millisecond accuracy
5133(the design goal for libev). This requirement is overfulfilled by 5133(the design goal for libev). This requirement is overfulfilled by
5134implementations using IEEE 754, which is basically all existing ones. 5134implementations using IEEE 754, which is basically all existing ones.
5135 5135
5136With IEEE 754 doubles, you get microsecond accuracy until at least the 5136With IEEE 754 doubles, you get microsecond accuracy until at least the
5137year 2255 (and millisecond accuray till the year 287396 - by then, libev 5137year 2255 (and millisecond accuracy till the year 287396 - by then, libev
5138is either obsolete or somebody patched it to use C<long double> or 5138is either obsolete or somebody patched it to use C<long double> or
5139something like that, just kidding). 5139something like that, just kidding).
5140 5140
5141=back 5141=back
5142 5142

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines