Sma*_*elf 2 perl event-handling
我想弄清楚Perl中的Event Loops?
目前我的程序是这样的:
while(my $event = wait_for_event()){
handle_event($event);
try_to_do_something();
}
Run Code Online (Sandbox Code Playgroud)
wait_for_event阻塞的地方.
我想弄清楚我是否可以使用EV,或AnyEvent(AE)或其他东西来添加另一个事件观察者.
例如,我希望能够每2秒调用一次try_to_do_something(),但是目前我还没把它放入事件循环中.
此外,我想添加一些与程序的交互形式,可能通过套接字(另一个观察者).
谢谢
事件系统的想法不是编写阻止等待一个特定事件的线性代码,而是设置处理程序,以便在事件发生时做什么,然后等待任何这些事件发生.事件框架通常会在事件发生时分派给这些事件处理程序.然后诀窍是设置处理程序,并等待它.
EV和AnyEvent都会支持这种事情.另外要注意的是POE,IO::Async和Reflex.
一般的想法在任何这些中都会大致相同,但我会举一个例子,IO::Async因为我知道它最好,主要是因为我写了它.
use IO::Async::Loop;
use IO::Async::Timer::Periodic;
my $loop = IO::Async::Loop->new;
$loop->add( IO::Async::Timer::Periodic->new(
interval => 2,
on_tick => \&try_to_do_something
)->start );
# Perhaps here you'd add your socket watcher, using an
# IO::Async::Handle or ::Stream or something else
$loop->run;
Run Code Online (Sandbox Code Playgroud)
该$loop->add方法将通知程序对象安装到循环中,在这种情况下,循环是每2秒运行指定函数的周期性计时器.在程序的底部,main $loop->run方法然后在适当的时间调度到事件处理程序.
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |