BGS

 view release on metacpan or  search on metacpan

BGS.pm  view on Meta::CPAN


	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()) {

BGS.pm  view on Meta::CPAN


			} 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 )