- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在尝试理解 AnyEvent 时,我创建了两个计时器,每次触发时都会打印到屏幕上。最初两者都不起作用。但关注 Joshua Barratt's timer example ,我发现如果我没有undef
计时器的观察者变量然后计时器的回调根本没有触发。为什么会这样?我怀疑这与范围在 perl 和/或 AnyEvent 中的工作方式有关。
这是我的示例程序:
#!/usr/bin/perl
use AE;
my $cv = AE::cv;
sub func1 {
my $spoke = 0;
my $t1; $t1 = AE::timer 0, 1,
sub {
print "Timer 1 Fired\n";
if($spoke++ > 5) {
print "Timer 1 Done\n";
undef $t1;
}
};
print "Timer 1 started\n";
}
sub func2 {
my $spoke = 0;
my $t2; $t2 = AE::timer 0, 1,
sub {
print "Timer 2 Fired\n";
if($spoke++ > 5) {
print "Timer 2 Done\n";
#undef $t2;
}
};
print "Timer 2 started\n";
}
func1();
func2();
$cv->recv;
Timer 1 started
Timer 2 started
Timer 1 Fired
Timer 1 Fired
Timer 1 Fired
Timer 1 Fired
Timer 1 Fired
Timer 1 Fired
Timer 1 Fired
Timer 1 Done
undef $t2;
行,定时器 2 的回调被触发,我得到这个:
Timer 1 started
Timer 2 started
Timer 1 Fired
Timer 2 Fired
Timer 2 Fired
Timer 1 Fired
Timer 1 Fired
Timer 2 Fired
Timer 2 Fired
Timer 1 Fired
Timer 1 Fired
Timer 2 Fired
Timer 2 Fired
Timer 1 Fired
Timer 1 Fired
Timer 1 Done
Timer 2 Fired
Timer 2 Done
最佳答案
您必须保持保护对象( $t1
的值)处于事件状态。如果对它的所有引用都消失了,它将被销毁,从而取消事件。
引用 $t1
在闭包中导致闭包捕获它,使其在正常死亡后继续存活 func
.
如果你想捕获一个你不需要的变量,你可以使用
$t2 if 0; # Keep timer alive until process exit.
sub make_closure {
my ($x) = @_;
return sub {
print("$x\n");
};
}
my $f1 = make_closure("Hello, World!");
my $f2 = make_closure("Allo, Jeune Renard!");
$f1->();
$f2->();
$x
当时存在吗?
关于perl - 为什么 AnyEvent 计时器观察器必须在其回调中取消定义才能触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22461348/
假设我使用 N 个帐户对象。 我想为N个Account创建几个fork,并独立包含一个事件AnyEvent->timer()。这是我的代码的样子: for my $num_account (1..2)
在 Mojolicious 应用程序中,我试图在单击链接时将 ODT 文件转换为 HTML。我使用 shell 命令“soffice”转换文件。转换文件需要一些时间。我向用户发送状态消息以通知他进度。
我怎样才能使计时器“可见”?此示例返回(始终与 sleep 时间无关)2 (我期待类似于 sleep 时间的东西)。 #!/usr/local/bin/perl use warnings; use 5
在尝试理解 AnyEvent 时,我创建了两个计时器,每次触发时都会打印到屏幕上。最初两者都不起作用。但关注 Joshua Barratt's timer example ,我发现如果我没有undef
AnyEvent::HTTP 在 Debian 和 Centos 上试过,都使用 perl 5.10 之后没有声音 perl -Mstrict -we 'use AnyEvent::HTTP; htt
我们正在构建一个具有复杂逻辑的大型应用程序,它由模块组成。我曾经用更简单的方法构建更大规模的方法,例如, # fig. 1 package Foo; sub highlevel { my
我正在处理一个使用 AnyEvent 异步编写的 Perl 项目.在测试期间,我遇到过这样一种情况:我的代码中的一个错误导致在我的测试完成后调用了阻塞的代码,因此测试看起来通过了,但阻塞的调用最终会污
我尝试使用 perl 模块 AnyEvent::HTTP 通过以下帖子发出异步 HTTP 请求:http://www.windley.com/archives/2012/03/asynchronous
我在单例包中使用 AnyEvent::DBI,当数小时后数据库/查询等中没有事件时,我在尝试发出查询时收到此错误: DBD::mysql::st execute failed: MySQL serve
我对 perl 相对较新,甚至对 perl 中的线程也较新。我有一个 perl 脚本,它从 3 个不同的来源获取输入。 (2 个 LDAP 查询和一个不总是存在的文件)因为某些部分可能比其他部分花费更
有必要只读取页面的一部分(n 字节)并关闭连接,如何在 AnyEvent::HTTP 上执行此操作? 最佳答案 on_body当块到达时被重复调用。从 on_body 返回 false终止下载。 su
我有下面的代码来做非阻塞 rpush 到 redis 服务器 当我只运行 1 rpush 时,代码工作正常 但是当我在 while 循环中运行它时,脚本在第一次执行后挂起。 为什么 ? #!/usr/
最近我遇到了一个很棒的 perl 模块“AnyEvent”,它允许用户进行异步/事件驱动的编程。 创建了以下代码片段,它工作正常。我遇到的问题是,在打开和关闭大量套接字后,它很快耗尽了所有客户端端口(
我正在创建一个本地服务来监听 localhost 并提供一个基本的调用和响应类型接口(interface)。我想开始的是一个婴儿服务器,您可以通过 telnet 连接到它并回显它接收到的内容。 我听说
我正在尝试创建一个 ping 的 perl 模块(使用 linux 系统 ping) 到数百台主机,并从每台主机的标准输出中获取 ping 的数据(如丢包和传输的数据包数量以及接收的数据包数量等)。
我对 Plack、Twiggy 和 AnyEvent 很陌生,遇到了问题。 我有面向客户端的应用程序服务器,这些服务器向后端游戏服务器发出请求。游戏服务器会做一些事情。 1. 当来自应用程序服务器的请
我正在查看 AnyEvent::Fork模块。我有 20 个外部脚本,我想并行调用(一次 6 个),并在全部完成后汇总它们的输出。我不知道如何实现这一目标。 模块中的示例代码(仅调用 1 个子代码)有
我开始学习 AnyEvent 并且遇到了一些麻烦。 我完全误解了如何获得异步利润 fe : #!/usr/bin/env perl package LatencySub; use strict; us
我有一个脚本,可以使用 AnyEvent 频繁地写入文件。我编写了以下示例来说明我面临的问题。 #!/usr/bin/perl use strict; use warnings; use AnyEve
我是 Perl 5 异步进程的新手,发现 CPAN 令人兴奋。提供我们可以在 Node.js 中提供的类似支持使用 AnyEvent、IO::Async 等。但是,本教程提供了一些复杂内容的示例。我只
我是一名优秀的程序员,十分优秀!