本当に初歩的なところなので、今後いい感じに追加していきます。
use strict;
use warnings;
use AnyEvent::Impl::Perl;
use AnyEvent;
print "start\n";
my $cv = AnyEvent->condvar;
my $io; $io = AnyEvent->io(
fh => \*STDIN, # 標準入力
poll => 'r', # 読み取り専用?
cb => sub {
print "cb start\n";
chomp(my $input =);
undef $io;
$cv->send($input); # send(....)を実行すると、recvの戻り値が入る
},
);
print "recv wait\n";
if (defined(my $input = $cv->recv)) { # sendの引数が戻り値として受け取れる
print "got: [$input]\n";
}
print "end\n";
ひとまず実行
perl sample.pl
start
recv wait
・・・ここで待たされる。
hogehoge[Enter] <= 入力する
cb start
got: [hogehoge]
end
ポイントはrecvを呼び出すと、sendの引数を取得するために、待ちます。
次はAnyEvent->timer
use strict;
use warnings;
use AnyEvent::Impl::Perl;
use AnyEvent;
print "start\n";
my $cv = AnyEvent->condvar;
my $timer; $timer = AnyEvent->timer(
after => 3, # 3秒後に
interval => 1, # 1秒間隔
cb => sub {
print "cb start\n";
$cv->send;
},
);
print "wait\n";
$cv->recv; # 待機
print "end\n";
実行
perl any_event_timer.pl
start
wait
(3秒後)
end
after: 指定した時間後に実行
interval: 1秒間隔
ただし繰り返し処理させる場合、別のAnyEvent->condvar;でsleepする必要あり?
0 件のコメント:
コメントを投稿