AnyEvent计时器问题

时间:2011-07-28 06:40:40

标签: 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;

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:3)

sleep处于“活动状态”时,事件循环未运行(没有任何内容正在运行)。因此,不能触发任何在AnyEvent中注册的事件。

规则:如果您使用AnyEvent(或任何其他异步框架),请勿使用sleep

请参阅user5402的答案以获得正确的解决方案。

相关问题