我特别使用 AnyEvent::Inotify::Simple (使用 EV 作为后端)来监视文件事件。所以我有一个处理程序回调,在特定情况下,我需要在继续之前“暂停”。 sleep
显然会停止一切(所以在sleep
完成之后才会处理其他事件),所以我尝试使用alarm
但是如果发生再次设置警报的相同场景,则原始警报(以及它的$SIG{ALRM}
子警报)将被忽略,并且只有“新“一个正在运行。
#sleep-based approach (definitely a no-go)
sub handler {
my ( $self, $event, $file ) = @_;
#do some stuff
...
if( $some_condition_exists ) {
sleep(3);
#now that we've waited, if some change occurred then do stuff
if ( $new_change_occurred ) {
#do some new stuff
}
}
return;
}
#alarm -based approach (still a no-go when callback is called again while original alarm is still counting down)
sub handler {
my ( $self, $event, $file ) = @_;
#do some stuff
...
if( $some_condition_exists ) {
$SIG{ALRM} = sub {
#now that we've waited, if some change occurred then do stuff
if ( $new_change_occurred ) {
#do some new stuff
}
}
alarm(3);
}
return;
}
任何意见,将不胜感激?我所需要的只是一种让回调暂停的方法,同时继续异步处理新的 inotify 事件。