The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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.