ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV.pm
(Generate patch)

Comparing EV/EV.pm (file contents):
Revision 1.79 by root, Sat Dec 22 16:37:07 2007 UTC vs.
Revision 1.94 by root, Tue May 20 23:54:05 2008 UTC

35 warn "sigquit received\n"; 35 warn "sigquit received\n";
36 }; 36 };
37 37
38 # CHILD/PID STATUS CHANGES 38 # CHILD/PID STATUS CHANGES
39 39
40 my $w = EV::child 666, sub { 40 my $w = EV::child 666, 0, sub {
41 my ($w, $revents) = @_; 41 my ($w, $revents) = @_;
42 my $status = $w->rstatus; 42 my $status = $w->rstatus;
43 }; 43 };
44 44
45 # STAT CHANGES 45 # STAT CHANGES
56=head1 DESCRIPTION 56=head1 DESCRIPTION
57 57
58This module provides an interface to libev 58This module provides an interface to libev
59(L<http://software.schmorp.de/pkg/libev.html>). While the documentation 59(L<http://software.schmorp.de/pkg/libev.html>). While the documentation
60below is comprehensive, one might also consult the documentation of libev 60below is comprehensive, one might also consult the documentation of libev
61itself (L<http://cvs.schmorp.de/libev/ev.html>) for more subtle details on 61itself (L<http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod>) for more
62watcher semantics or some discussion on the available backends, or how to 62subtle details on watcher semantics or some discussion on the available
63force a specific backend with C<LIBEV_FLAGS>, or just about in any case 63backends, or how to force a specific backend with C<LIBEV_FLAGS>, or just
64because it has much more detailed information. 64about in any case because it has much more detailed information.
65
66This module is very fast and scalable. It is actually so fast that you
67can use it through the L<AnyEvent> module, stay portable to other event
68loops (if you don't rely on any watcher types not available through it)
69and still be faster than with any other event loop currently supported in
70Perl.
65 71
66=cut 72=cut
67 73
68package EV; 74package EV;
69 75
70use strict; 76use strict;
71 77
72BEGIN { 78BEGIN {
73 our $VERSION = '2.0'; 79 our $VERSION = '3.4';
74 use XSLoader; 80 use XSLoader;
75 XSLoader::load "EV", $VERSION; 81 XSLoader::load "EV", $VERSION;
76} 82}
77 83
78@EV::IO::ISA = 84@EV::IO::ISA =
84@EV::Idle::ISA = 90@EV::Idle::ISA =
85@EV::Prepare::ISA = 91@EV::Prepare::ISA =
86@EV::Check::ISA = 92@EV::Check::ISA =
87@EV::Embed::ISA = 93@EV::Embed::ISA =
88@EV::Fork::ISA = 94@EV::Fork::ISA =
95@EV::Async::ISA =
89 "EV::Watcher"; 96 "EV::Watcher";
90 97
91@EV::Loop::Default::ISA = "EV::Loop"; 98@EV::Loop::Default::ISA = "EV::Loop";
92 99
93=head1 EVENT LOOPS 100=head1 EVENT LOOPS
155 162
156Returns the set (see C<EV::BACKEND_*> flags) of backends supported by this 163Returns the set (see C<EV::BACKEND_*> flags) of backends supported by this
157instance of EV, the set of recommended backends (supposed to be good) for 164instance of EV, the set of recommended backends (supposed to be good) for
158this platform and the set of embeddable backends (see EMBED WATCHERS). 165this platform and the set of embeddable backends (see EMBED WATCHERS).
159 166
167=item EV::sleep $seconds
168
169Block the process for the given number of (fractional) seconds.
170
160=item $time = EV::time 171=item $time = EV::time
161 172
162Returns the current time in (fractional) seconds since the epoch. 173Returns the current time in (fractional) seconds since the epoch.
163 174
164=item $time = EV::now 175=item $time = EV::now
529This time simply fires at the wallclock time C<$at> and doesn't repeat. It 540This time simply fires at the wallclock time C<$at> and doesn't repeat. It
530will not adjust when a time jump occurs, that is, if it is to be run 541will not adjust when a time jump occurs, that is, if it is to be run
531at January 1st 2011 then it will run when the system time reaches or 542at January 1st 2011 then it will run when the system time reaches or
532surpasses this time. 543surpasses this time.
533 544
534=item * non-repeating interval timer ($interval > 0, $reschedule_cb = 0) 545=item * repeating interval timer ($interval > 0, $reschedule_cb = 0)
535 546
536In this mode the watcher will always be scheduled to time out at the 547In this mode the watcher will always be scheduled to time out at the
537next C<$at + N * $interval> time (for some integer N) and then repeat, 548next C<$at + N * $interval> time (for some integer N) and then repeat,
538regardless of any time jumps. 549regardless of any time jumps.
539 550
557time the periodic watcher gets scheduled, the reschedule callback 568time the periodic watcher gets scheduled, the reschedule callback
558($reschedule_cb) will be called with the watcher as first, and the current 569($reschedule_cb) will be called with the watcher as first, and the current
559time as second argument. 570time as second argument.
560 571
561I<This callback MUST NOT stop or destroy this or any other periodic 572I<This callback MUST NOT stop or destroy this or any other periodic
562watcher, ever>. If you need to stop it, return 1e30 and stop it 573watcher, ever, and MUST NOT call any event loop functions or methods>. If
563afterwards. 574you need to stop it, return 1e30 and stop it afterwards. You may create
575and start a C<EV::prepare> watcher for this task.
564 576
565It must return the next time to trigger, based on the passed time value 577It must return the next time to trigger, based on the passed time value
566(that is, the lowest time value larger than to the second argument). It 578(that is, the lowest time value larger than or equal to to the second
567will usually be called just before the callback will be triggered, but 579argument). It will usually be called just before the callback will be
568might be called at other times, too. 580triggered, but might be called at other times, too.
569 581
570This can be used to create very complex timers, such as a timer that 582This can be used to create very complex timers, such as a timer that
571triggers on each midnight, local time (actually 24 hours after the last 583triggers on each midnight, local time (actually 24 hours after the last
572midnight, to keep the example simple. If you know a way to do it correctly 584midnight, to keep the example simple. If you know a way to do it correctly
573in about the same space (without requiring elaborate modules), drop me a 585in about the same space (without requiring elaborate modules), drop me a
640 652
641=head3 CHILD WATCHERS - watch out for process status changes 653=head3 CHILD WATCHERS - watch out for process status changes
642 654
643=over 4 655=over 4
644 656
645=item $w = EV::child $pid, $callback 657=item $w = EV::child $pid, $trace, $callback
646 658
647=item $w = EV::child_ns $pid, $callback 659=item $w = EV::child_ns $pid, $trace, $callback
648 660
649=item $w = $loop->child ($pid, $callback) 661=item $w = $loop->child ($pid, $trace, $callback)
650 662
651=item $w = $loop->child_ns ($pid, $callback) 663=item $w = $loop->child_ns ($pid, $trace, $callback)
652 664
653Call the callback when a status change for pid C<$pid> (or any pid if 665Call the callback when a status change for pid C<$pid> (or any pid
654C<$pid> is 0) has been received. More precisely: when the process receives 666if C<$pid> is 0) has been received (a status change happens when the
667process terminates or is killed, or, when trace is true, additionally when
668it is stopped or continued). More precisely: when the process receives
655a C<SIGCHLD>, EV will fetch the outstanding exit/wait status for all 669a C<SIGCHLD>, EV will fetch the outstanding exit/wait status for all
656changed/zombie children and call the callback. 670changed/zombie children and call the callback.
657 671
658It is valid (and fully supported) to install a child watcher after a child 672It is valid (and fully supported) to install a child watcher after a child
659has exited but before the event loop has started its next iteration (for 673has exited but before the event loop has started its next iteration (for
666You can have as many pid watchers per pid as you want, they will all be 680You can have as many pid watchers per pid as you want, they will all be
667called. 681called.
668 682
669The C<child_ns> variant doesn't start (activate) the newly created watcher. 683The C<child_ns> variant doesn't start (activate) the newly created watcher.
670 684
671=item $w->set ($pid) 685=item $w->set ($pid, $trace)
672 686
673Reconfigures the watcher, see the constructor above for details. Can be called at 687Reconfigures the watcher, see the constructor above for details. Can be called at
674any time. 688any time.
675 689
676=item $current_pid = $w->pid 690=item $current_pid = $w->pid
677
678=item $old_pid = $w->pid ($new_pid)
679 691
680Returns the previously set process id and optionally set a new one. 692Returns the previously set process id and optionally set a new one.
681 693
682=item $exit_status = $w->rstatus 694=item $exit_status = $w->rstatus
683 695
964 976
965The C<embed_ns> variant doesn't start (activate) the newly created watcher. 977The C<embed_ns> variant doesn't start (activate) the newly created watcher.
966 978
967=back 979=back
968 980
981=head3 ASYNC WATCHERS - how to wake up another event loop
982
983Async watchers are provided by EV, but have little use in perl directly, as perl
984neither supports threads nor direct access to signal handlers or other
985contexts where they could be of value.
986
987It is, however, possible to use them from the XS level.
988
989Please see the libev documentation for further details.
990
991=over 4
992
993=item $w = EV::async $callback
994
995=item $w = EV::async_ns $callback
996
997=item $w->send
998
999=item $bool = $w->async_pending
1000
1001=back
1002
969 1003
970=head1 PERL SIGNALS 1004=head1 PERL SIGNALS
971 1005
972While Perl signal handling (C<%SIG>) is not affected by EV, the behaviour 1006While Perl signal handling (C<%SIG>) is not affected by EV, the behaviour
973with EV is as the same as any other C library: Perl-signals will only be 1007with EV is as the same as any other C library: Perl-signals will only be
1022 1056
1023=head1 SEE ALSO 1057=head1 SEE ALSO
1024 1058
1025L<EV::ADNS> (asynchronous DNS), L<Glib::EV> (makes Glib/Gtk2 use EV as 1059L<EV::ADNS> (asynchronous DNS), L<Glib::EV> (makes Glib/Gtk2 use EV as
1026event loop), L<EV::Glib> (embed Glib into EV), L<Coro::EV> (efficient 1060event loop), L<EV::Glib> (embed Glib into EV), L<Coro::EV> (efficient
1027coroutines with EV), L<Net::SNMP::EV> (asynchronous SNMP). 1061coroutines with EV), L<Net::SNMP::EV> (asynchronous SNMP), L<AnyEvent> for
1062event-loop agnostic and portable event driven programming.
1028 1063
1029=head1 AUTHOR 1064=head1 AUTHOR
1030 1065
1031 Marc Lehmann <schmorp@schmorp.de> 1066 Marc Lehmann <schmorp@schmorp.de>
1032 http://home.schmorp.de/ 1067 http://home.schmorp.de/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines