AnyEventを使ってみる

AnyEventをつかってみる
本当に初歩的なところなので、今後いい感じに追加していきます。

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 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...