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

Comparing EV/EV.pm (file contents):
Revision 1.80 by root, Sat Dec 22 16:48:33 2007 UTC vs.
Revision 1.93 by root, Tue May 20 19:52:12 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
533This 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
534will 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
535at 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
536surpasses this time. 543surpasses this time.
537 544
538=item * non-repeating interval timer ($interval > 0, $reschedule_cb = 0) 545=item * repeating interval timer ($interval > 0, $reschedule_cb = 0)
539 546
540In 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
541next 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,
542regardless of any time jumps. 549regardless of any time jumps.
543 550
644 651
645=head3 CHILD WATCHERS - watch out for process status changes 652=head3 CHILD WATCHERS - watch out for process status changes
646 653
647=over 4 654=over 4
648 655
649=item $w = EV::child $pid, $callback 656=item $w = EV::child $pid, $trace, $callback
650 657
651=item $w = EV::child_ns $pid, $callback 658=item $w = EV::child_ns $pid, $trace, $callback
652 659
653=item $w = $loop->child ($pid, $callback) 660=item $w = $loop->child ($pid, $trace, $callback)
654 661
655=item $w = $loop->child_ns ($pid, $callback) 662=item $w = $loop->child_ns ($pid, $trace, $callback)
656 663
657Call the callback when a status change for pid C<$pid> (or any pid if 664Call the callback when a status change for pid C<$pid> (or any pid
658C<$pid> is 0) has been received. More precisely: when the process receives 665if C<$pid> is 0) has been received (a status change happens when the
666process terminates or is killed, or, when trace is true, additionally when
667it is stopped or continued). More precisely: when the process receives
659a C<SIGCHLD>, EV will fetch the outstanding exit/wait status for all 668a C<SIGCHLD>, EV will fetch the outstanding exit/wait status for all
660changed/zombie children and call the callback. 669changed/zombie children and call the callback.
661 670
662It is valid (and fully supported) to install a child watcher after a child 671It is valid (and fully supported) to install a child watcher after a child
663has exited but before the event loop has started its next iteration (for 672has exited but before the event loop has started its next iteration (for
670You can have as many pid watchers per pid as you want, they will all be 679You can have as many pid watchers per pid as you want, they will all be
671called. 680called.
672 681
673The C<child_ns> variant doesn't start (activate) the newly created watcher. 682The C<child_ns> variant doesn't start (activate) the newly created watcher.
674 683
675=item $w->set ($pid) 684=item $w->set ($pid, $trace)
676 685
677Reconfigures the watcher, see the constructor above for details. Can be called at 686Reconfigures the watcher, see the constructor above for details. Can be called at
678any time. 687any time.
679 688
680=item $current_pid = $w->pid 689=item $current_pid = $w->pid
681
682=item $old_pid = $w->pid ($new_pid)
683 690
684Returns the previously set process id and optionally set a new one. 691Returns the previously set process id and optionally set a new one.
685 692
686=item $exit_status = $w->rstatus 693=item $exit_status = $w->rstatus
687 694
968 975
969The C<embed_ns> variant doesn't start (activate) the newly created watcher. 976The C<embed_ns> variant doesn't start (activate) the newly created watcher.
970 977
971=back 978=back
972 979
980=head3 ASYNC WATCHERS - how to wake up another event loop
981
982Async watchers are provided by EV, but have little use in perl directly, as perl
983neither supports threads nor direct access to signal handlers or other
984contexts where they could be of value.
985
986It is, however, possible to use them from the XS level.
987
988Please see the libev documentation for further details.
989
990=over 4
991
992=item $w = EV::async $callback
993
994=item $w = EV::async_ns $callback
995
996=item $w->send
997
998=item $bool = $w->async_pending
999
1000=back
1001
973 1002
974=head1 PERL SIGNALS 1003=head1 PERL SIGNALS
975 1004
976While Perl signal handling (C<%SIG>) is not affected by EV, the behaviour 1005While Perl signal handling (C<%SIG>) is not affected by EV, the behaviour
977with EV is as the same as any other C library: Perl-signals will only be 1006with EV is as the same as any other C library: Perl-signals will only be
1026 1055
1027=head1 SEE ALSO 1056=head1 SEE ALSO
1028 1057
1029L<EV::ADNS> (asynchronous DNS), L<Glib::EV> (makes Glib/Gtk2 use EV as 1058L<EV::ADNS> (asynchronous DNS), L<Glib::EV> (makes Glib/Gtk2 use EV as
1030event loop), L<EV::Glib> (embed Glib into EV), L<Coro::EV> (efficient 1059event loop), L<EV::Glib> (embed Glib into EV), L<Coro::EV> (efficient
1031coroutines with EV), L<Net::SNMP::EV> (asynchronous SNMP). 1060coroutines with EV), L<Net::SNMP::EV> (asynchronous SNMP), L<AnyEvent> for
1061event-loop agnostic and portable event driven programming.
1032 1062
1033=head1 AUTHOR 1063=head1 AUTHOR
1034 1064
1035 Marc Lehmann <schmorp@schmorp.de> 1065 Marc Lehmann <schmorp@schmorp.de>
1036 http://home.schmorp.de/ 1066 http://home.schmorp.de/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines