-
Threads : erreur running
Bonjour,
Pour lancer plusieurs proc, au lieu de lancer DANS plusieurs fenetres DOS mon proc, je fais des threads
J'ai l'impression qu'il prendre un peu plus de temps (par rapport à l'excéution sur fenetres DOS) et surtout il y a une erreur que je ne comprends pas trop
"A thread exited while 3 threads were running"
PS: '3' est un exemple, ça peut 2,4.....
#!/usr/bin/perl -w
use threads;
my($thr1);
$thr1 = threads->new(\&sub1, "Param 1","1.txt");
$thr1 = threads->new(\&sub1, "Param 2","2.txt");
$thr1 = threads->new(\&sub1, "Param 3","3.txt");
$thr1 = threads->new(\&sub1, "Param 4","4.txt");
$thr1 = threads->new(\&sub1, "Paraaaaa","5.txt");
@DonneesRenvoyees = $thr1->join;
print "Le thread a renvoyé @DonneesRenvoyees";
#***************************************************************************
sub sub1 {
my ($num,$fileO) = @_;
open(FILEIN,">$fileO") ;
if ($num eq "Paraaaaa"){
return ("ERREUR FICHIER");
}
for( my $i=0; $i<=10000; $i+=1 ){
#print ("Dans le thread : ".$num.":".$i."===".$toto."\n");
print (FILEIN "Dans le thread : ".$num.":".$i."\n");
}
close(FILEIN);
return ("FIN OK");
}
}
savez vous pourquoi ?
Merci
Cathy
-
Heu je dirais que c'est parce que ton thread1 join alors que les autres non.
De plus tu n'utilise ni lock ni semaphore pour empecher tes threads de ce marcher dessus.
Je te conseille aussi d'installer la dernière versions des threads perl http://search.cpan.org/~jdhedden/thr....61/threads.pm la stabilité c'est améliorer m'empeche que les threads perl ne sont pas top :aie: , tu peut les utiliser si tu ne fait pas trop d'opérations exotique :aie:
-
super
merci pour ta réponse,
ça fonctionne avec par ex:
foreach $thr (threads->list) {
# Ne pas rejoindre le thread principal ni nous-mêmes
if ($thr->tid && !threads::equal($thr, threads->self)) {
($myResult)=$thr->join;
}
}
cathy