1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #!/usr/bin/perl -w
use strict;
use diagnostics;
use POE qw( Component::Pool::Thread );
use Thread::Queue;
# Création d'une nouvelle file d'attente
my $DataQueue = Thread::Queue->new;
# Un ti tableau avec a bouffer pr les threads
my @k = qw/a b c d e f g h i j k l m /;
# On entasse des données dans la file d'attente
foreach my $i ( @k ) {
print " $i \n";
$DataQueue->enqueue( $i );
}
POE::Component::Pool::Thread->new
( MinFree => 2,
MaxFree => 5,
MaxThreads => 15,
StartThrneads => 5,
Name => "ThreadPool",
EntryPoint => \&thread_entry_point,
CallBack => \&result_handler,
inline_states => {
_start => sub {
my ($kernel, $heap) = @_[ KERNEL, HEAP ];
while ( $DataQueue->pending() > 0 ) {
my $arguements = $DataQueue->dequeue;
# We are inside the component session
$kernel->yield(run => $arguements);
$kernel->post(ThreadPool => run => $arguements);
}
},
}
);
# Affiche les données des threads
sub thread_entry_point {
# my (@arguements) = @_;
my $arg = shift;
print " $arg \n";
return 1;
}
sub result_handler {
my ($kernel, $result) = @_[ KERNEL, ARG0 ];
$result == 1;
return;
}
POE::Kernel->run(); |
Partager