YanoRyuichi.com/
Wiki
Blog
GitHub
Sandbox
開始行:
* AnyEvent::Timer [#p55a52ec]
** 例1 [#l73eb059]
#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
use AnyEvent;
my $cv = AnyEvent->condvar;
$cv->cb(
sub {
say "callback is called.";
}
);
my $timer;
$timer = AnyEvent->timer(
after => 3,
interval => 0,
cb => sub {
say '3 secs passed.';
undef $timer;
$cv->send;
}
);
say "Start.";
$cv->recv;
say "End.";
- メイン処理がメインループに相当し、AnyEvent->timer()のcb...
- メインループの$cv->recvで、イベントループで$cv->sendす...
** 例2 [#afa750a8]
use strict;
use warnings;
use 5.012;
use AnyEvent;
my @after = (2,3,1,4);
my $cv = AnyEvent->condvar;
$cv->cb(
sub {
say "callback is called.";
}
);
foreach my $after (@after) {
$cv->begin;
my $timer;
$timer = AnyEvent->timer(
after => $after,
interval => 0,
cb => sub {
say "$after secs passed.";
undef $timer;
$cv->end;
}
);
}
say "Start.";
$cv->recv;
say "End.";
- $cv->beginでフラグを上げて、$cv->endでフラグを落とす。
- 全部フラグが落ちると、メインループのrecvに戻る。
** 例3 [#ycbe79c1]
#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
use AnyEvent;
sub add {
my ( $x, $y, $cv ) = @_;
my $timer;
$timer = AnyEvent->timer(
after => 3,
interval => 0,
cb => sub {
$cv->send($x + $y);
undef $timer;
}
);
}
my $cv = AnyEvent->condvar;
$cv->cb(
sub {
my ($result) = $cv->recv;
say "Resut = $result";
}
);
add( 3, 2, $cv );
say "Start.";
$cv->recv;
say "End.";
- ウォッチャーにcondvarを渡して、ウォッチャー内でsend()す...
- そして、結果はコールバックに渡される。
** 参考 [#xc1a7e64]
http://www.slideshare.net/lestrrat/perl-4925529
終了行:
* AnyEvent::Timer [#p55a52ec]
** 例1 [#l73eb059]
#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
use AnyEvent;
my $cv = AnyEvent->condvar;
$cv->cb(
sub {
say "callback is called.";
}
);
my $timer;
$timer = AnyEvent->timer(
after => 3,
interval => 0,
cb => sub {
say '3 secs passed.';
undef $timer;
$cv->send;
}
);
say "Start.";
$cv->recv;
say "End.";
- メイン処理がメインループに相当し、AnyEvent->timer()のcb...
- メインループの$cv->recvで、イベントループで$cv->sendす...
** 例2 [#afa750a8]
use strict;
use warnings;
use 5.012;
use AnyEvent;
my @after = (2,3,1,4);
my $cv = AnyEvent->condvar;
$cv->cb(
sub {
say "callback is called.";
}
);
foreach my $after (@after) {
$cv->begin;
my $timer;
$timer = AnyEvent->timer(
after => $after,
interval => 0,
cb => sub {
say "$after secs passed.";
undef $timer;
$cv->end;
}
);
}
say "Start.";
$cv->recv;
say "End.";
- $cv->beginでフラグを上げて、$cv->endでフラグを落とす。
- 全部フラグが落ちると、メインループのrecvに戻る。
** 例3 [#ycbe79c1]
#!/usr/bin/env perl
use strict;
use warnings;
use 5.012;
use AnyEvent;
sub add {
my ( $x, $y, $cv ) = @_;
my $timer;
$timer = AnyEvent->timer(
after => 3,
interval => 0,
cb => sub {
$cv->send($x + $y);
undef $timer;
}
);
}
my $cv = AnyEvent->condvar;
$cv->cb(
sub {
my ($result) = $cv->recv;
say "Resut = $result";
}
);
add( 3, 2, $cv );
say "Start.";
$cv->recv;
say "End.";
- ウォッチャーにcondvarを渡して、ウォッチャー内でsend()す...
- そして、結果はコールバックに渡される。
** 参考 [#xc1a7e64]
http://www.slideshare.net/lestrrat/perl-4925529
ページ名: