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

Comparing AnyEvent/lib/AnyEvent.pm (file contents):
Revision 1.168 by root, Tue Jul 8 23:53:37 2008 UTC vs.
Revision 1.179 by root, Thu Sep 4 10:58:58 2008 UTC

6 6
7=head1 SYNOPSIS 7=head1 SYNOPSIS
8 8
9 use AnyEvent; 9 use AnyEvent;
10 10
11 my $w = AnyEvent->io (fh => $fh, poll => "r|w", cb => sub { 11 my $w = AnyEvent->io (fh => $fh, poll => "r|w", cb => sub { ... });
12 ...
13 });
14 12
15 my $w = AnyEvent->timer (after => $seconds, cb => sub { 13 my $w = AnyEvent->timer (after => $seconds, cb => sub { ... });
14 my $w = AnyEvent->timer (after => $seconds, interval => $seconds, cb => ...
15
16 print AnyEvent->now; # prints current event loop time
17 print AnyEvent->time; # think Time::HiRes::time or simply CORE::time.
18
19 my $w = AnyEvent->signal (signal => "TERM", cb => sub { ... });
20
21 my $w = AnyEvent->child (pid => $pid, cb => sub {
22 my ($pid, $status) = @_;
16 ... 23 ...
17 }); 24 });
18 25
19 my $w = AnyEvent->condvar; # stores whether a condition was flagged 26 my $w = AnyEvent->condvar; # stores whether a condition was flagged
20 $w->send; # wake up current and all future recv's 27 $w->send; # wake up current and all future recv's
21 $w->recv; # enters "main loop" till $condvar gets ->send 28 $w->recv; # enters "main loop" till $condvar gets ->send
29 # use a condvar in callback mode:
30 $w->cb (sub { $_[0]->recv });
22 31
23=head1 INTRODUCTION/TUTORIAL 32=head1 INTRODUCTION/TUTORIAL
24 33
25This manpage is mainly a reference manual. If you are interested 34This manpage is mainly a reference manual. If you are interested
26in a tutorial or some gentle introduction, have a look at the 35in a tutorial or some gentle introduction, have a look at the
381The instrument to do that is called a "condition variable", so called 390The instrument to do that is called a "condition variable", so called
382because they represent a condition that must become true. 391because they represent a condition that must become true.
383 392
384Condition variables can be created by calling the C<< AnyEvent->condvar 393Condition variables can be created by calling the C<< AnyEvent->condvar
385>> method, usually without arguments. The only argument pair allowed is 394>> method, usually without arguments. The only argument pair allowed is
395
386C<cb>, which specifies a callback to be called when the condition variable 396C<cb>, which specifies a callback to be called when the condition variable
387becomes true. 397becomes true, with the condition variable as the first argument (but not
398the results).
388 399
389After creation, the condition variable is "false" until it becomes "true" 400After creation, the condition variable is "false" until it becomes "true"
390by calling the C<send> method (or calling the condition variable as if it 401by calling the C<send> method (or calling the condition variable as if it
391were a callback, read about the caveats in the description for the C<< 402were a callback, read about the caveats in the description for the C<<
392->send >> method). 403->send >> method).
448 459
449 my $done = AnyEvent->condvar; 460 my $done = AnyEvent->condvar;
450 my $delay = AnyEvent->timer (after => 5, cb => $done); 461 my $delay = AnyEvent->timer (after => 5, cb => $done);
451 $done->recv; 462 $done->recv;
452 463
464Example: Imagine an API that returns a condvar and doesn't support
465callbacks. This is how you make a synchronous call, for example from
466the main program:
467
468 use AnyEvent::CouchDB;
469
470 ...
471
472 my @info = $couchdb->info->recv;
473
474And this is how you would just ste a callback to be called whenever the
475results are available:
476
477 $couchdb->info->cb (sub {
478 my @info = $_[0]->recv;
479 });
480
453=head3 METHODS FOR PRODUCERS 481=head3 METHODS FOR PRODUCERS
454 482
455These methods should only be used by the producing side, i.e. the 483These methods should only be used by the producing side, i.e. the
456code/module that eventually sends the signal. Note that it is also 484code/module that eventually sends the signal. Note that it is also
457the producer side which creates the condvar in most cases, but it isn't 485the producer side which creates the condvar in most cases, but it isn't
590=item $bool = $cv->ready 618=item $bool = $cv->ready
591 619
592Returns true when the condition is "true", i.e. whether C<send> or 620Returns true when the condition is "true", i.e. whether C<send> or
593C<croak> have been called. 621C<croak> have been called.
594 622
595=item $cb = $cv->cb ([new callback]) 623=item $cb = $cv->cb ($cb->($cv))
596 624
597This is a mutator function that returns the callback set and optionally 625This is a mutator function that returns the callback set and optionally
598replaces it before doing so. 626replaces it before doing so.
599 627
600The callback will be called when the condition becomes "true", i.e. when 628The callback will be called when the condition becomes "true", i.e. when
826no warnings; 854no warnings;
827use strict; 855use strict;
828 856
829use Carp; 857use Carp;
830 858
831our $VERSION = 4.2; 859our $VERSION = 4.233;
832our $MODEL; 860our $MODEL;
833 861
834our $AUTOLOAD; 862our $AUTOLOAD;
835our @ISA; 863our @ISA;
836 864
963 991
964 my $class = shift; 992 my $class = shift;
965 $class->$func (@_); 993 $class->$func (@_);
966} 994}
967 995
996# utility function to dup a filehandle. this is used by many backends
997# to support binding more than one watcher per filehandle (they usually
998# allow only one watcher per fd, so we dup it to get a different one).
999sub _dupfh($$$$) {
1000 my ($poll, $fh, $r, $w) = @_;
1001
1002 require Fcntl;
1003
1004 # cygwin requires the fh mode to be matching, unix doesn't
1005 my ($rw, $mode) = $poll eq "r" ? ($r, "<")
1006 : $poll eq "w" ? ($w, ">")
1007 : Carp::croak "AnyEvent->io requires poll set to either 'r' or 'w'";
1008
1009 open my $fh2, "$mode&" . fileno $fh
1010 or die "cannot dup() filehandle: $!";
1011
1012 # we assume CLOEXEC is already set by perl in all important cases
1013
1014 ($fh2, $rw)
1015}
1016
968package AnyEvent::Base; 1017package AnyEvent::Base;
969 1018
970# default implementation for now and time 1019# default implementation for now and time
971 1020
972use Time::HiRes (); 1021BEGIN {
1022 if (eval "use Time::HiRes (); time (); 1") {
1023 *_time = \&Time::HiRes::time;
1024 # if (eval "use POSIX (); (POSIX::times())...
1025 } else {
1026 *_time = \&CORE::time; # epic fail
1027 }
1028}
973 1029
974sub time { Time::HiRes::time } 1030sub time { _time }
975sub now { Time::HiRes::time } 1031sub now { _time }
976 1032
977# default implementation for ->condvar 1033# default implementation for ->condvar
978 1034
979sub condvar { 1035sub condvar {
980 bless { @_ == 3 ? (_ae_cb => $_[2]) : () }, AnyEvent::CondVar:: 1036 bless { @_ == 3 ? (_ae_cb => $_[2]) : () }, AnyEvent::CondVar::
1185 1241
1186=item C<PERL_ANYEVENT_STRICT> 1242=item C<PERL_ANYEVENT_STRICT>
1187 1243
1188AnyEvent does not do much argument checking by default, as thorough 1244AnyEvent does not do much argument checking by default, as thorough
1189argument checking is very costly. Setting this variable to a true value 1245argument checking is very costly. Setting this variable to a true value
1190will cause AnyEvent to thoroughly check the arguments passed to most 1246will cause AnyEvent to load C<AnyEvent::Strict> and then to thoroughly
1191method calls and croaks if it finds any problems. In other words, enables 1247check the arguments passed to most method calls. If it finds any problems
1248it will croak.
1249
1250In other words, enables "strict" mode.
1251
1192"strict" mode. Unlike C<use strict> it is definitely recommended ot keep 1252Unlike C<use strict> it is definitely recommended ot keep it off in
1193it off in production. 1253production.
1194 1254
1195=item C<PERL_ANYEVENT_MODEL> 1255=item C<PERL_ANYEVENT_MODEL>
1196 1256
1197This can be used to specify the event model to be used by AnyEvent, before 1257This can be used to specify the event model to be used by AnyEvent, before
1198auto detection and -probing kicks in. It must be a string consisting 1258auto detection and -probing kicks in. It must be a string consisting

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines