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

Comparing libev/ev.pod (file contents):
Revision 1.256 by root, Tue Jul 14 20:31:21 2009 UTC vs.
Revision 1.258 by root, Wed Jul 15 16:58:53 2009 UTC

1755 1755
1756If the event loop is suspended for a long time, you can also force an 1756If the event loop is suspended for a long time, you can also force an
1757update of the time returned by C<ev_now ()> by calling C<ev_now_update 1757update of the time returned by C<ev_now ()> by calling C<ev_now_update
1758()>. 1758()>.
1759 1759
1760=head3 The special problems of suspended animation
1761
1762When you leave the server world it is quite customary to hit machines that
1763can suspend/hibernate - what happens to the clocks during such a suspend?
1764
1765Some quick tests made with a Linux 2.6.28 indicate that a suspend freezes
1766all processes, while the clocks (C<times>, C<CLOCK_MONOTONIC>) continue
1767to run until the system is suspended, but they will not advance while the
1768system is suspended. That means, on resume, it will be as if the program
1769was frozen for a few seconds, but the suspend time will not be counted
1770towards C<ev_timer> when a monotonic clock source is used. The real time
1771clock advanced as expected, but if it is used as sole clocksource, then a
1772long suspend would be detected as a time jump by libev, and timers would
1773be adjusted accordingly.
1774
1775I would not be surprised to see different behaviour in different between
1776operating systems, OS versions or even different hardware.
1777
1778The other form of suspend (job control, or sending a SIGSTOP) will see a
1779time jump in the monotonic clocks and the realtime clock. If the program
1780is suspended for a very long time, and monotonic clock sources are in use,
1781then you can expect C<ev_timer>s to expire as the full suspension time
1782will be counted towards the timers. When no monotonic clock source is in
1783use, then libev will again assume a timejump and adjust accordingly.
1784
1785It might be beneficial for this latter case to call C<ev_suspend>
1786and C<ev_resume> in code that handles C<SIGTSTP>, to at least get
1787deterministic behaviour in this case (you can do nothing against
1788C<SIGSTOP>).
1789
1760=head3 Watcher-Specific Functions and Data Members 1790=head3 Watcher-Specific Functions and Data Members
1761 1791
1762=over 4 1792=over 4
1763 1793
1764=item ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat) 1794=item ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)
1789If the timer is repeating, either start it if necessary (with the 1819If the timer is repeating, either start it if necessary (with the
1790C<repeat> value), or reset the running timer to the C<repeat> value. 1820C<repeat> value), or reset the running timer to the C<repeat> value.
1791 1821
1792This sounds a bit complicated, see L<Be smart about timeouts>, above, for a 1822This sounds a bit complicated, see L<Be smart about timeouts>, above, for a
1793usage example. 1823usage example.
1824
1825=item ev_timer_remaining (loop, ev_timer *)
1826
1827Returns the remaining time until a timer fires. If the timer is active,
1828then this time is relative to the current event loop time, otherwise it's
1829the timeout value currently configured.
1830
1831That is, after an C<ev_timer_set (w, 5, 7)>, C<ev_timer_remaining> returns
1832C<5>. When the timer is started and one second passes, C<ev_timer_remain>
1833will return C<4>. When the timer expires and is restarted, it will return
1834roughly C<7> (likely slightly less as callback invocation takes some time,
1835too), and so on.
1794 1836
1795=item ev_tstamp repeat [read-write] 1837=item ev_tstamp repeat [read-write]
1796 1838
1797The current C<repeat> value. Will be used each time the watcher times out 1839The current C<repeat> value. Will be used each time the watcher times out
1798or C<ev_timer_again> is called, and determines the next timeout (if any), 1840or C<ev_timer_again> is called, and determines the next timeout (if any),

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines