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.282 by root, Tue Aug 11 01:18:27 2009 UTC vs.
Revision 1.288 by root, Tue Sep 1 10:40:05 2009 UTC

592 after => 1, 592 after => 1,
593 cb => sub { $result_ready->send }, 593 cb => sub { $result_ready->send },
594 ); 594 );
595 595
596 # this "blocks" (while handling events) till the callback 596 # this "blocks" (while handling events) till the callback
597 # calls -<send 597 # calls ->send
598 $result_ready->recv; 598 $result_ready->recv;
599 599
600Example: wait for a timer, but take advantage of the fact that condition 600Example: wait for a timer, but take advantage of the fact that condition
601variables are also callable directly. 601variables are also callable directly.
602 602
1116 1116
1117BEGIN { AnyEvent::common_sense } 1117BEGIN { AnyEvent::common_sense }
1118 1118
1119use Carp (); 1119use Carp ();
1120 1120
1121our $VERSION = '5.1'; 1121our $VERSION = '5.112';
1122our $MODEL; 1122our $MODEL;
1123 1123
1124our $AUTOLOAD; 1124our $AUTOLOAD;
1125our @ISA; 1125our @ISA;
1126 1126
1912 warn "read: $input\n"; # output what has been read 1912 warn "read: $input\n"; # output what has been read
1913 $cv->send if $input =~ /^q/i; # quit program if /^q/i 1913 $cv->send if $input =~ /^q/i; # quit program if /^q/i
1914 }, 1914 },
1915 ); 1915 );
1916 1916
1917 my $time_watcher; # can only be used once
1918
1919 sub new_timer {
1920 $timer = AnyEvent->timer (after => 1, cb => sub { 1917 my $time_watcher = AnyEvent->timer (after => 1, interval => 1, cb => sub {
1921 warn "timeout\n"; # print 'timeout' about every second 1918 warn "timeout\n"; # print 'timeout' at most every second
1922 &new_timer; # and restart the time
1923 }); 1919 });
1924 }
1925
1926 new_timer; # create first timer
1927 1920
1928 $cv->recv; # wait until user enters /^q/i 1921 $cv->recv; # wait until user enters /^q/i
1929 1922
1930=head1 REAL-WORLD EXAMPLE 1923=head1 REAL-WORLD EXAMPLE
1931 1924
2375As you can see, the AnyEvent + EV combination even beats the 2368As you can see, the AnyEvent + EV combination even beats the
2376hand-optimised "raw sockets benchmark", while AnyEvent + its pure perl 2369hand-optimised "raw sockets benchmark", while AnyEvent + its pure perl
2377backend easily beats IO::Lambda and POE. 2370backend easily beats IO::Lambda and POE.
2378 2371
2379And even the 100% non-blocking version written using the high-level (and 2372And even the 100% non-blocking version written using the high-level (and
2380slow :) L<AnyEvent::Handle> abstraction beats both POE and IO::Lambda by a 2373slow :) L<AnyEvent::Handle> abstraction beats both POE and IO::Lambda
2381large margin, even though it does all of DNS, tcp-connect and socket I/O 2374higher level ("unoptimised") abstractions by a large margin, even though
2382in a non-blocking way. 2375it does all of DNS, tcp-connect and socket I/O in a non-blocking way.
2383 2376
2384The two AnyEvent benchmarks programs can be found as F<eg/ae0.pl> and 2377The two AnyEvent benchmarks programs can be found as F<eg/ae0.pl> and
2385F<eg/ae2.pl> in the AnyEvent distribution, the remaining benchmarks are 2378F<eg/ae2.pl> in the AnyEvent distribution, the remaining benchmarks are
2386part of the IO::lambda distribution and were used without any changes. 2379part of the IO::Lambda distribution and were used without any changes.
2387 2380
2388 2381
2389=head1 SIGNALS 2382=head1 SIGNALS
2390 2383
2391AnyEvent currently installs handlers for these signals: 2384AnyEvent currently installs handlers for these signals:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines