Dmitry E. Oboukhov > AnyEvent-AggressiveIdle-0.04 > AnyEvent::AggressiveIdle

Download:
AnyEvent-AggressiveIdle-0.04.tar.gz

Dependencies

Annotate this POD

View/Report Bugs
Module Version: 0.04   Source  

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 Your 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.

Continuous process. ^

Sometimes You need to to something continuous inside idle callback. If You want to stop idle calls until You have done Your work, You can hold guard inside Your process:

    aggressive_idle {
        my ($pid, $guard) = @_;
        my $timer;
        $timer = AE::timer 0.5, 0 => sub {
            undef $timer;
            undef $guard;   # POINT 1
        }
    }

Until 'POINT 1' aggressive_idle won't call its callback. Feel free to stop_aggressive_idle before free the guard.

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.

VCS ^

The project is placed on my GIT repo: http://git.uvw.ru/?p=anyevent-aggressiveidle;a=summary

syntax highlighting: