我想弄清楚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”。

09-16 22:31