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.90 by root, Sat Apr 26 03:34:24 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
61itself (L<http://cvs.schmorp.de/libev/ev.html>) for more subtle details on 61itself (L<http://cvs.schmorp.de/libev/ev.html>) for more subtle details on
62watcher semantics or some discussion on the available backends, or how to 62watcher semantics or some discussion on the available backends, or how to
63force a specific backend with C<LIBEV_FLAGS>, or just about in any case 63force a specific backend with C<LIBEV_FLAGS>, or just about in any case
64because it has much more detailed information. 64because it has much more detailed information.
65 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.
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.31';
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
640 651
641=head3 CHILD WATCHERS - watch out for process status changes 652=head3 CHILD WATCHERS - watch out for process status changes
642 653
643=over 4 654=over 4
644 655
645=item $w = EV::child $pid, $callback 656=item $w = EV::child $pid, $trace, $callback
646 657
647=item $w = EV::child_ns $pid, $callback 658=item $w = EV::child_ns $pid, $trace, $callback
648 659
649=item $w = $loop->child ($pid, $callback) 660=item $w = $loop->child ($pid, $trace, $callback)
650 661
651=item $w = $loop->child_ns ($pid, $callback) 662=item $w = $loop->child_ns ($pid, $trace, $callback)
652 663
653Call 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
654C<$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
655a 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
656changed/zombie children and call the callback. 669changed/zombie children and call the callback.
657 670
658It 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
659has 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
666You 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
667called. 680called.
668 681
669The 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.
670 683
671=item $w->set ($pid) 684=item $w->set ($pid, $trace)
672 685
673Reconfigures 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
674any time. 687any time.
675 688
676=item $current_pid = $w->pid 689=item $current_pid = $w->pid
677
678=item $old_pid = $w->pid ($new_pid)
679 690
680Returns the previously set process id and optionally set a new one. 691Returns the previously set process id and optionally set a new one.
681 692
682=item $exit_status = $w->rstatus 693=item $exit_status = $w->rstatus
683 694
964 975
965The 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.
966 977
967=back 978=back
968 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
969 1002
970=head1 PERL SIGNALS 1003=head1 PERL SIGNALS
971 1004
972While 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
973with 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
1022 1055
1023=head1 SEE ALSO 1056=head1 SEE ALSO
1024 1057
1025L<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
1026event 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
1027coroutines 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.
1028 1062
1029=head1 AUTHOR 1063=head1 AUTHOR
1030 1064
1031 Marc Lehmann <schmorp@schmorp.de> 1065 Marc Lehmann <schmorp@schmorp.de>
1032 http://home.schmorp.de/ 1066 http://home.schmorp.de/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines