AnyEvent定时器问题



如何使定时器"可见" ?此示例返回(独立于睡眠时间always) 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;

至少有两个问题:

  • 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;

事件循环没有运行(好吧,没有运行),而sleep是"活动"。因此,AnyEvent中注册的任何事件都不能被触发。

规则:如果你使用AnyEvent(或任何其他异步框架),不要使用sleep

请参考user5402的答案。

相关内容

  • 没有找到相关文章

最新更新