首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnyEvent计时器问题

AnyEvent计时器问题
EN

Stack Overflow用户
提问于 2011-07-28 14:40:40
回答 2查看 2.6K关注 0票数 5

我怎样才能使计时器“可见”呢?此示例返回(与睡眠时间始终无关) 2 (我期望的值与睡眠时间类似)。

代码语言:javascript
复制
#!/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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-28 15:18:04

至少有两个问题:

  • sleep 5不会运行事件循环。
  • 你的回调会触发条件。变量。例如,如果删除了sleep 5语句,则$c将仅为1。

这是你想要的吗?

代码语言:javascript
复制
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;
票数 6
EN

Stack Overflow用户

发布于 2012-09-05 00:01:50

sleep处于“活动”状态时,事件循环没有运行(好吧,什么也没有运行)。因此不能触发任何注册到AnyEvent的事件。

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

有关正确的解决方案,请参阅user5402的答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6854962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档