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.