NAME
AnyEvent::AggressiveIdle - Aggressive idle processes for AnyEvent.
SYNOPSIS
use AnyEvent::AggressiveIdle qw(aggressive_idle};
aggressive_idle {
... do something important
};
my $idle;
$idle = aggressive_idle {
... do something important
if (FINISH) {
undef $idle; # do not call the sub anymore
}
};
DESCRIPTION
Sometimes You need to do something that takes much time but can be split into elementary phases. If You use AE::idle and You program is a highload project, idle process can be delayed for much time (second, hour, day, etc). aggressive_idle will be called for each AnyEvent loop cycle. So You can be sure that Your idle process will continue.
EXPORTS
aggressive_idle
Register Your function as aggressive idle watcher. If it is called in VOID context, the watcher wont be deinstalled. Be carrefully.
In NON_VOID context the function returns a guard. Hold the guard until You want to cancel idle process.
stop_aggressive_idle
You can use the function to stop idle process. The function receives idle process PID that can be received in idle callback (the first argument).
Example:
use AnyEvent::AggressiveIdle ':all'; # or:
use AnyEvent::AggressiveIdle qw(aggressive_idle stop_aggressive_idle);
aggressive_idle {
my ($pid) = @_;
....
stop_aggressive_idle $pid;
}
The function will throw an exception if invalid PID is received.
AUTHOR
Dmitry E. Oboukhov, <unera@debian.org>
COPYRIGHT AND LICENSE
Copyright (C) 2011 by Dmitry E. Oboukhov
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.