AnyEvent计时器问题

sid*_*com 5 perl timer event-handling anyevent

我怎么能让计时器"可见"?这个例子返回(始终与睡眠时间相关)2(我期望类似于睡眠时间).

#!/usr/local/bin/perl
use warnings;
use 5.014;
use AnyEvent;

my $c = 0;
my $cv = AnyEvent->condvar;

my $once_per_second = AnyEvent->timer (
    after => 0,
    interval => 1,
    cb => sub {
        $c++;
        $cv->send;
    },
);

sleep 5;

$cv->recv;

say $c;
Run Code Online (Sandbox Code Playgroud)

Eri*_*ikR 6

至少有两个问题:

  • sleep 5 不运行事件循环.
  • 你的回调会触发cond.变量.例如,如果您删除了该sleep 5语句,则$c只会为1.

这是你想要的吗?

my $c = 0;
my $cv = AnyEvent->condvar;
my $once_per_second = AnyEvent->timer(after => 0, interval => 1, cb => sub { $c++ });
my $five_seconds = AnyEvent->timer(after => 5, cb => sub { $cv->send });
$cv->recv;
say $c;
Run Code Online (Sandbox Code Playgroud)