BGS
view release on metacpan or search on metacpan
if ($limit > 0 and keys %fh2data >= $limit) {
push @to_call, $data;
} else {
_call($data);
}
return $data;
}
sub bgs_call(&$) {
my ($sub, $callback) = @_;
my $data = _bgs_call($sub, $callback);
return $$data{vpid};
}
sub bgs_back(&) { shift }
sub bgs_wait(;$) {
my ($waited) = @_;
if ($waited and not exists $vpid2data{$waited} and not grep { $$_{vpid} eq $waited } @to_call) {
return;
}
local $SIG{PIPE} = "IGNORE";
my $buf;
my $blksize = 1024;
while ($sel->count()) {
} else {
die "Can't read '$fh': $!";
}
}
}
}
sub bgs_break(;$) {
my ($vpid) = @_;
if (defined $vpid) {
my $data = $vpid2data{$vpid};
defined $data or return;
if (my $pid = $$data{pid}) {
$$data{break} = 1;
kill "TERM", $pid;
}
@to_call = grep { $$_{vpid} ne $vpid } @to_call;
} else {
BGS/Future.pm view on Meta::CPAN
}
}
sub cancel {
my $self = shift;
BGS::bgs_break($$self{vpid});
}
sub future(&) {
__PACKAGE__->new($_[0]);
}
1;
__END__
BGS/Limit.pm view on Meta::CPAN
our @ISA = qw(Exporter);
our @EXPORT = qw(bgs_call bgs_back bgs_wait bgs_break);
our $VERSION = '0.12';
use BGS ();
my @jobs = ();
sub bgs_call(&$) { push @jobs, \@_ }
sub bgs_back(&) { shift }
sub do_job {
my $job = shift @jobs or return;
my ($sub, $callback) = @$job;
&BGS::bgs_call($sub, sub {
my $r = shift;
$callback->($r);
do_job();
});
}
sub bgs_wait($) {
my ($max) = @_;
if ($max) {
do_job() foreach 1 .. $max;
BGS::bgs_wait();
} else {
foreach (@jobs) {
my ($sub, $callback) = @$_;
my $r = $sub->();
$callback->($r);
}
}
}
sub bgs_break() {
@jobs = ();
BGS::bgs_break();
}
1;
__END__
( run in 1.343 second using v1.01-cache-2.11-cpan-65fba6d93b7 )