我想弄清楚Perl中的事件循环吗?
目前,我的程序执行以下操作:
while(my $event = wait_for_event()){
handle_event($event);
try_to_do_something();
}
其中wait_for_event被阻止。
我试图弄清楚是否可以使用EV或AnyEvent(AE)或其他添加其他事件观察器的方法。
例如,我希望能够每2秒调用一次try_to_do_something(),但目前无法将其放入事件循环。
另外,我想添加一些与程序的交互形式,可能是通过套接字(另一个观察者)进行的。
谢谢
最佳答案
也许您正在尝试做这样的事情?
use AnyEvent;
use AnyEvent::Filesys::Notify;
sub try_to_do_something { say "every two seconds" }
sub handle_event { say $_->path." ".$_->type for @_ }
my $n = AnyEvent::Filesys::Notify->new(
dirs => ['/tmp'],
interval => 0.5,
filter => sub { 1 },
cb => sub { handle_event(@_) },
);
my $w = AE::timer 0, 2, sub {try_to_do_something};
AnyEvent->condvar->recv;
包含AnyEvent和AnyEvent :: Filesys :: Notify的代码片段只是实现此目的的一种方法。基本上,无论使用哪种框架,它都几乎总是相同的方式:使用回调设置观察者并输入“ mainloop”。