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.256 by root, Tue Jul 14 20:31:21 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
4028 } 4033 }
4029 4034
4030Instead of invoking all pending watchers, the C<l_invoke> callback will 4035Instead of invoking all pending watchers, the C<l_invoke> callback will
4031signal the main thread via some unspecified mechanism (signals? pipe 4036signal the main thread via some unspecified mechanism (signals? pipe
4032writes? C<Async::Interrupt>?) and then waits until all pending watchers 4037writes? C<Async::Interrupt>?) and then waits until all pending watchers
4033have been called: 4038have been called (in a while loop because a) spurious wakeups are possible
4039and b) skipping inter-thread-communication when there are no pending
4040watchers is very beneficial):
4034 4041
4035 static void 4042 static void
4036 l_invoke (EV_P) 4043 l_invoke (EV_P)
4037 { 4044 {
4038 userdata *u = ev_userdata (EV_A); 4045 userdata *u = ev_userdata (EV_A);
4039 4046
4047 while (ev_pending_count (EV_A))
4048 {
4040 wake_up_other_thread_in_some_magic_or_not_so_magic_way (); 4049 wake_up_other_thread_in_some_magic_or_not_so_magic_way ();
4041
4042 pthread_cond_wait (&u->invoke_cv, &u->lock); 4050 pthread_cond_wait (&u->invoke_cv, &u->lock);
4051 }
4043 } 4052 }
4044 4053
4045Now, whenever the main thread gets told to invoke pending watchers, it 4054Now, 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 4055will grab the lock, call C<ev_invoke_pending> and then signal the loop
4047thread to continue: 4056thread to continue:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines