Acme-Sort-Sleep
view release on metacpan or search on metacpan
local/lib/perl5/IO/Async/Loop.pm view on Meta::CPAN
$self->{notifiers}->{$nkey} = $notifier;
$notifier->__set_loop( $self );
$self->_add_noparentcheck( $_ ) for $notifier->children;
return;
}
=head2 remove
$loop->remove( $notifier )
This method removes a notifier object from the stored collection, and
recursively and children notifiers it contains.
=cut
sub remove
{
my $self = shift;
my ( $notifier ) = @_;
if( defined $notifier->parent ) {
croak "Cannot remove a child notifier directly - remove its parent";
}
$self->_remove_noparentcheck( $notifier );
}
sub _remove_noparentcheck
{
my $self = shift;
my ( $notifier ) = @_;
my $nkey = refaddr $notifier;
exists $self->{notifiers}->{$nkey} or croak "Notifier does not exist in collection";
delete $self->{notifiers}->{$nkey};
$notifier->__set_loop( undef );
$self->_remove_noparentcheck( $_ ) for $notifier->children;
return;
}
=head2 notifiers
@notifiers = $loop->notifiers
Returns a list of all the notifier objects currently stored in the Loop.
=cut
sub notifiers
{
my $self = shift;
# Sort so the order remains stable under additions/removals
return map { $self->{notifiers}->{$_} } sort keys %{ $self->{notifiers} };
}
###################
# Looping support #
###################
=head1 LOOPING CONTROL
The following methods control the actual run cycle of the loop, and hence the
program.
=cut
=head2 loop_once
$count = $loop->loop_once( $timeout )
This method performs a single wait loop using the specific subclass's
underlying mechanism. If C<$timeout> is undef, then no timeout is applied, and
it will wait until an event occurs. The intention of the return value is to
indicate the number of callbacks that this loop executed, though different
subclasses vary in how accurately they can report this. See the documentation
for this method in the specific subclass for more information.
=cut
sub loop_once
{
my $self = shift;
my ( $timeout ) = @_;
croak "Expected that $self overrides ->loop_once";
}
=head2 run
@result = $loop->run
$result = $loop->run
Runs the actual IO event loop. This method blocks until the C<stop> method is
called, and returns the result that was passed to C<stop>. In scalar context
only the first result is returned; the others will be discarded if more than
one value was provided. This method may be called recursively.
This method is a recent addition and may not be supported by all the
C<IO::Async::Loop> subclasses currently available on CPAN.
=cut
sub run
{
my $self = shift;
local $self->{running} = 1;
local $self->{result} = [];
while( $self->{running} ) {
$self->loop_once( undef );
}
( run in 1.393 second using v1.01-cache-2.11-cpan-39bf76dae61 )