NAME
Timeout::Queue - A priority queue made for handling timeouts
DESCRIPTION
This module is a simple priority queue based on perl's own array structures. The actual sleeping is not done by this module as it is ment for integration with a IO::Select based event loop or similar.
Inserts are handled by using splice, deletes are done by marking and later shifting off when it is posible.
SYNOPSIS
#
# Use as an object
#
use Timeout::Queue;
my $timeouts = new Timeout::Queue(Time => sub { return time; });
$timeouts->queue(
timeout => 1, # time out in 1 seconds.
callme => sub {
print "I timed out!!\n";
}
);
sleep $timeouts->timeout();
foreach my $item ($timeouts->handle()) {
$item->{callme}->();
}
#
# Use with functions and own array
#
use Timeout::Queue qw(queue_timeout handle_timeout, get_timeout);
my @timeouts;
my $timeout;
my $timeout_id = 1;
queue_timeout(\@timeouts, time,
timeout_id = ++$timeout_id,
timeout => 1, # time out in 1 seconds.
callme => sub {
print "I timed out!!\n";
}
);
# Get the first timeout
$timeout = get_timeout(\@timeouts, time);
sleep $timeout;
foreach my $item (handle_timeout(\@timeouts, time)) {
$item->{callme}->();
}
# Get the next timeout
$timeout = get_timeout(\@timeouts, time);
METHODS
- new()
-
Creates a new Timeout::Queue object.
You can optionally add a a "Time" option if you would like to use something else than the build in time function. This can be usefull if your sleeping mechanism supports sub second precision.
The default works like this if nothing is given:
$timeouts->new(Time => sub { return time; });
- queue(timeout => $timeout)
-
Queue a new timeout item, only the timeout values is used from the list. The rest will be returned later in a hash reference by
handle()
.Returns the timeout id or an array with timeout id and the next timeout in the queue.
- delete($key, $value)
-
Delete the item's where key and value are equal to what is given.
Returns the next timeout in the queue.
- handle()
-
Returns all the items that have timed out so far.
- timeout()
-
Return the next timeout on the queue or undef if it's empty.
- timeouts()
-
Return array refrence with queued timeouts.
- queue_timeout(\@timeouts, timeout => $timeout)
-
Queue a new timeout item, only the timeout values is used from the list. The rest will be returned later in a hash reference by
handle_timeout()
.Returns the next timeout or -1 if it was not change by the queueing.
- delete_timeout(\@timeouts, $key, $value)
-
Delete the item's where key and value are equal to what is given.
Returns the next timeout.
- handle_timeout(\@timeouts, time())
-
Returns all the items that have timed out so far.
- get_timeout(\@timeouts, time())
-
Return the next timeout on the queue or undef if it's empty.
AUTHOR
Troels Liebe Bentsen <tlb@rapanden.dk>
COPYRIGHT
Copyright(C) 2005-2007 Troels Liebe Bentsen
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.