Bob Showalter wrote:
> You want to have some communication between the
> children and the parents so the child can tell the parent when he's
> ready to receive the next message.
Here's an example using a pipe for the children to signal the parent:
#!/usr/bin/perl
use strict;
use IO::Pipe;
use IO::Handle;
use Proc::Fork;
my $num_children = 3; # no. of children
my $control = IO::Pipe->new; # control channel
# Spawn off some children
my @child;
for my $num (1 .. $num_children) {
my $data = IO::Pipe->new; # data channel
child {
$data->reader;
$control->writer;
$control->autoflush(1);
print $control "$num\n";
while (<$data>) {
chomp;
print "Child $num: received [$_]\n";
sleep rand(3) + 1;
print $control "$num\n";
}
exit;
};
# parent
$data->writer;
$data->autoflush(1);
push @child, $data;
next;
}
# send data to children as they become ready
my $n = 1;
$control->reader;
while(<$control>) {
chomp;
my $fh = $child[$_ - 1];
print $fh "Data $n\n";
$n++;
last if $n > 20;
}
# reap the children
close $_ for @child;
1 while wait > 0;
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>