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

Comparing libev/ev.pod (file contents):
Revision 1.255 by root, Tue Jul 14 19:11:31 2009 UTC vs.
Revision 1.259 by root, Sun Jul 19 01:36:34 2009 UTC

862 862
863This call will simply invoke all pending watchers while resetting their 863This call will simply invoke all pending watchers while resetting their
864pending state. Normally, C<ev_loop> does this automatically when required, 864pending state. Normally, C<ev_loop> does this automatically when required,
865but when overriding the invoke callback this call comes handy. 865but when overriding the invoke callback this call comes handy.
866 866
867=item int ev_pending_count (loop)
868
869Returns the number of pending watchers - zero indicates that no watchers
870are pending.
871
867=item ev_set_invoke_pending_cb (loop, void (*invoke_pending_cb)(EV_P)) 872=item ev_set_invoke_pending_cb (loop, void (*invoke_pending_cb)(EV_P))
868 873
869This overrides the invoke pending functionality of the loop: Instead of 874This overrides the invoke pending functionality of the loop: Instead of
870invoking all pending watchers when there are any, C<ev_loop> will call 875invoking all pending watchers when there are any, C<ev_loop> will call
871this callback instead. This is useful, for example, when you want to 876this callback instead. This is useful, for example, when you want to
1750 1755
1751If 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
1752update 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
1753()>. 1758()>.
1754 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
1755=head3 Watcher-Specific Functions and Data Members 1790=head3 Watcher-Specific Functions and Data Members
1756 1791
1757=over 4 1792=over 4
1758 1793
1759=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)
1784If the timer is repeating, either start it if necessary (with the 1819If the timer is repeating, either start it if necessary (with the
1785C<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.
1786 1821
1787This 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
1788usage 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.
1789 1836
1790=item ev_tstamp repeat [read-write] 1837=item ev_tstamp repeat [read-write]
1791 1838
1792The 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
1793or 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),
2029Signal watchers will trigger an event when the process receives a specific 2076Signal watchers will trigger an event when the process receives a specific
2030signal one or more times. Even though signals are very asynchronous, libev 2077signal one or more times. Even though signals are very asynchronous, libev
2031will try it's best to deliver signals synchronously, i.e. as part of the 2078will try it's best to deliver signals synchronously, i.e. as part of the
2032normal event processing, like any other event. 2079normal event processing, like any other event.
2033 2080
2081Note that only the default loop supports registering signal watchers
2082currently.
2083
2034If you want signals asynchronously, just use C<sigaction> as you would 2084If you want signals asynchronously, just use C<sigaction> as you would
2035do without libev and forget about sharing the signal. You can even use 2085do without libev and forget about sharing the signal. You can even use
2036C<ev_async> from a signal handler to synchronously wake up an event loop. 2086C<ev_async> from a signal handler to synchronously wake up an event loop.
2037 2087
2038You can configure as many watchers as you like per signal. Only when the 2088You can configure as many watchers as you like per signal. Only when the
2039first watcher gets started will libev actually register a signal handler 2089first watcher gets started will libev actually register something with
2040with the kernel (thus it coexists with your own signal handlers as long as 2090the kernel (thus it coexists with your own signal handlers as long as you
2041you don't register any with libev for the same signal). Similarly, when 2091don't register any with libev for the same signal).
2042the last signal watcher for a signal is stopped, libev will reset the 2092
2043signal handler to SIG_DFL (regardless of what it was set to before). 2093Both the signal mask state (C<sigprocmask>) and the signal handler state
2094(C<sigaction>) are unspecified after starting a signal watcher (and after
2095sotpping it again), that is, libev might or might not block the signal,
2096and might or might not set or restore the installed signal handler.
2044 2097
2045If possible and supported, libev will install its handlers with 2098If possible and supported, libev will install its handlers with
2046C<SA_RESTART> behaviour enabled, so system calls should not be unduly 2099C<SA_RESTART> (or equivalent) behaviour enabled, so system calls should
2047interrupted. If you have a problem with system calls getting interrupted by 2100not be unduly interrupted. If you have a problem with system calls getting
2048signals you can block all signals in an C<ev_check> watcher and unblock 2101interrupted by signals you can block all signals in an C<ev_check> watcher
2049them in an C<ev_prepare> watcher. 2102and unblock them in an C<ev_prepare> watcher.
2050 2103
2051=head3 Watcher-Specific Functions and Data Members 2104=head3 Watcher-Specific Functions and Data Members
2052 2105
2053=over 4 2106=over 4
2054 2107
2099libev) 2152libev)
2100 2153
2101=head3 Process Interaction 2154=head3 Process Interaction
2102 2155
2103Libev grabs C<SIGCHLD> as soon as the default event loop is 2156Libev grabs C<SIGCHLD> as soon as the default event loop is
2104initialised. This is necessary to guarantee proper behaviour even if 2157initialised. This is necessary to guarantee proper behaviour even if the
2105the first child watcher is started after the child exits. The occurrence 2158first child watcher is started after the child exits. The occurrence
2106of C<SIGCHLD> is recorded asynchronously, but child reaping is done 2159of C<SIGCHLD> is recorded asynchronously, but child reaping is done
2107synchronously as part of the event loop processing. Libev always reaps all 2160synchronously as part of the event loop processing. Libev always reaps all
2108children, even ones not watched. 2161children, even ones not watched.
2109 2162
2110=head3 Overriding the Built-In Processing 2163=head3 Overriding the Built-In Processing
2120=head3 Stopping the Child Watcher 2173=head3 Stopping the Child Watcher
2121 2174
2122Currently, the child watcher never gets stopped, even when the 2175Currently, the child watcher never gets stopped, even when the
2123child terminates, so normally one needs to stop the watcher in the 2176child terminates, so normally one needs to stop the watcher in the
2124callback. Future versions of libev might stop the watcher automatically 2177callback. Future versions of libev might stop the watcher automatically
2125when a child exit is detected. 2178when a child exit is detected (calling C<ev_child_stop> twice is not a
2179problem).
2126 2180
2127=head3 Watcher-Specific Functions and Data Members 2181=head3 Watcher-Specific Functions and Data Members
2128 2182
2129=over 4 2183=over 4
2130 2184
4028 } 4082 }
4029 4083
4030Instead of invoking all pending watchers, the C<l_invoke> callback will 4084Instead of invoking all pending watchers, the C<l_invoke> callback will
4031signal the main thread via some unspecified mechanism (signals? pipe 4085signal the main thread via some unspecified mechanism (signals? pipe
4032writes? C<Async::Interrupt>?) and then waits until all pending watchers 4086writes? C<Async::Interrupt>?) and then waits until all pending watchers
4033have been called: 4087have been called (in a while loop because a) spurious wakeups are possible
4088and b) skipping inter-thread-communication when there are no pending
4089watchers is very beneficial):
4034 4090
4035 static void 4091 static void
4036 l_invoke (EV_P) 4092 l_invoke (EV_P)
4037 { 4093 {
4038 userdata *u = ev_userdata (EV_A); 4094 userdata *u = ev_userdata (EV_A);
4039 4095
4096 while (ev_pending_count (EV_A))
4097 {
4040 wake_up_other_thread_in_some_magic_or_not_so_magic_way (); 4098 wake_up_other_thread_in_some_magic_or_not_so_magic_way ();
4041
4042 pthread_cond_wait (&u->invoke_cv, &u->lock); 4099 pthread_cond_wait (&u->invoke_cv, &u->lock);
4100 }
4043 } 4101 }
4044 4102
4045Now, whenever the main thread gets told to invoke pending watchers, it 4103Now, whenever the main thread gets told to invoke pending watchers, it
4046will grab the lock, call C<ev_invoke_pending> and then signal the loop 4104will grab the lock, call C<ev_invoke_pending> and then signal the loop
4047thread to continue: 4105thread to continue:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines