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

Comparing libev/ev.pod (file contents):
Revision 1.254 by root, Tue Jul 14 19:02:43 2009 UTC vs.
Revision 1.257 by root, Wed Jul 15 16:08:24 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)
3998protecting the loop data, respectively. 4033protecting the loop data, respectively.
3999 4034
4000 static void 4035 static void
4001 l_release (EV_P) 4036 l_release (EV_P)
4002 { 4037 {
4003 udat *u = ev_userdata (EV_A); 4038 userdata *u = ev_userdata (EV_A);
4004 pthread_mutex_unlock (&u->lock); 4039 pthread_mutex_unlock (&u->lock);
4005 } 4040 }
4006 4041
4007 static void 4042 static void
4008 l_acquire (EV_P) 4043 l_acquire (EV_P)
4009 { 4044 {
4010 udat *u = ev_userdata (EV_A); 4045 userdata *u = ev_userdata (EV_A);
4011 pthread_mutex_lock (&u->lock); 4046 pthread_mutex_lock (&u->lock);
4012 } 4047 }
4013 4048
4014The event loop thread first acquires the mutex, and then jumps straight 4049The event loop thread first acquires the mutex, and then jumps straight
4015into C<ev_loop>: 4050into C<ev_loop>:
4028 } 4063 }
4029 4064
4030Instead of invoking all pending watchers, the C<l_invoke> callback will 4065Instead of invoking all pending watchers, the C<l_invoke> callback will
4031signal the main thread via some unspecified mechanism (signals? pipe 4066signal the main thread via some unspecified mechanism (signals? pipe
4032writes? C<Async::Interrupt>?) and then waits until all pending watchers 4067writes? C<Async::Interrupt>?) and then waits until all pending watchers
4033have been called: 4068have been called (in a while loop because a) spurious wakeups are possible
4069and b) skipping inter-thread-communication when there are no pending
4070watchers is very beneficial):
4034 4071
4035 static void 4072 static void
4036 l_invoke (EV_P) 4073 l_invoke (EV_P)
4037 { 4074 {
4038 udat *u = ev_userdata (EV_A); 4075 userdata *u = ev_userdata (EV_A);
4039 4076
4077 while (ev_pending_count (EV_A))
4078 {
4040 wake_up_other_thread_in_some_magic_or_not_so_magic_way (); 4079 wake_up_other_thread_in_some_magic_or_not_so_magic_way ();
4041
4042 pthread_cond_wait (&u->invoke_cv, &u->lock); 4080 pthread_cond_wait (&u->invoke_cv, &u->lock);
4081 }
4043 } 4082 }
4044 4083
4045Now, whenever the main thread gets told to invoke pending watchers, it 4084Now, 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 4085will grab the lock, call C<ev_invoke_pending> and then signal the loop
4047thread to continue: 4086thread to continue:
4048 4087
4049 static void 4088 static void
4050 real_invoke_pending (EV_P) 4089 real_invoke_pending (EV_P)
4051 { 4090 {
4052 udat *u = ev_userdata (EV_A); 4091 userdata *u = ev_userdata (EV_A);
4053 4092
4054 pthread_mutex_lock (&u->lock); 4093 pthread_mutex_lock (&u->lock);
4055 ev_invoke_pending (EV_A); 4094 ev_invoke_pending (EV_A);
4056 pthread_cond_signal (&u->invoke_cv); 4095 pthread_cond_signal (&u->invoke_cv);
4057 pthread_mutex_unlock (&u->lock); 4096 pthread_mutex_unlock (&u->lock);
4059 4098
4060Whenever you want to start/stop a watcher or do other modifications to an 4099Whenever you want to start/stop a watcher or do other modifications to an
4061event loop, you will now have to lock: 4100event loop, you will now have to lock:
4062 4101
4063 ev_timer timeout_watcher; 4102 ev_timer timeout_watcher;
4064 udat *u = ev_userdata (EV_A); 4103 userdata *u = ev_userdata (EV_A);
4065 4104
4066 ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.); 4105 ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);
4067 4106
4068 pthread_mutex_lock (&u->lock); 4107 pthread_mutex_lock (&u->lock);
4069 ev_timer_start (EV_A_ &timeout_watcher); 4108 ev_timer_start (EV_A_ &timeout_watcher);
4078=head3 COROUTINES 4117=head3 COROUTINES
4079 4118
4080Libev is very accommodating to coroutines ("cooperative threads"): 4119Libev is very accommodating to coroutines ("cooperative threads"):
4081libev fully supports nesting calls to its functions from different 4120libev fully supports nesting calls to its functions from different
4082coroutines (e.g. you can call C<ev_loop> on the same loop from two 4121coroutines (e.g. you can call C<ev_loop> on the same loop from two
4083different coroutines, and switch freely between both coroutines running the 4122different coroutines, and switch freely between both coroutines running
4084loop, as long as you don't confuse yourself). The only exception is that 4123the loop, as long as you don't confuse yourself). The only exception is
4085you must not do this from C<ev_periodic> reschedule callbacks. 4124that you must not do this from C<ev_periodic> reschedule callbacks.
4086 4125
4087Care has been taken to ensure that libev does not keep local state inside 4126Care has been taken to ensure that libev does not keep local state inside
4088C<ev_loop>, and other calls do not usually allow for coroutine switches as 4127C<ev_loop>, and other calls do not usually allow for coroutine switches as
4089they do not call any callbacks. 4128they do not call any callbacks.
4090 4129

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines