perl - AnyEvent 计时器问题

标签 perl timer event-handling anyevent

我怎样才能使计时器“可见”?此示例返回(始终与 sleep 时间无关)2 (我期待类似于 sleep 时间的东西)。

#!/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不运行事件循环。
  • 您的回调会触发条件。多变的。例如,如果您删除了 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;
    

    关于perl - AnyEvent 计时器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6854962/

    相关文章:

    perl - 在连接 (.) 或字符串中使用未初始化的值 $2

    c# - 如何使用带有 .NET Core 的 SignalR 从集线器类使用服务器端计时器?

    haskell - 我的计时器总是返回 0

    .net - 如何使单个事件处理程序处理ALL Button.Click事件?

    typescript - 在 TypeScript 类中创建自定义事件

    perl - 在 Mojolicious 中创建递归模板 block

    regex - 使用 perl 对行进行排序

    python - 需要 CGI(或与 IIS 7 兼容的其他解决方案)来处理*大量*上传

    c - 如何在c中立即启动定时器

    ios - 当我的 UIPanGestureRecognizer 与 UIScrollView 一起发生时,如何取消其他事件?