<DIV>Cara,</DIV>
<DIV>Você vai ter que criar o mecanismo de controle da quantidade de threads está sendo executada, eu recomendo você dar uma olhada no link <A href="http://migo.sixbit.org/papers/Perl_Threads/slide-index.html">http://migo.sixbit.org/papers/Perl_Threads/slide-index.html</A> para ter uma boa visão sobre threads e <A href="http://search.cpan.org/search?query=Threads&amp;mode=all">http://search.cpan.org/search?query=Threads&amp;mode=all</A> para as ferramentas de threads.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Estou enviando os código abaixos para vc ver como poderia ser 'controlado' estas threads.</DIV>
<DIV>&nbsp;</DIV>
<DIV>&lt;code&gt;<BR>use threads;<BR>use threads::shared;</DIV>
<DIV>our $TCounter : shared;</DIV>
<DIV>$MaxThreads = 25;</DIV>
<DIV>while ( loop de alguma coisa ) {<BR>&nbsp; lock ( $TCounter ); <BR>&nbsp; $TCounter++;<BR>&nbsp; my $Thread = threads-&gt;create(\&amp;Algumacoisa, $Valor01, $Valor02 );<BR>&nbsp; $Thread-&gt;detach();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; while ( $TCounter &gt;= $MaxThreads ) {<BR>&nbsp;&nbsp;&nbsp; print "Aguando liberar threads : $TCounter \n";<BR>&nbsp;&nbsp;&nbsp; threads-&gt;yield();<BR>&nbsp;&nbsp;&nbsp; sleep 1;<BR>&nbsp; }<BR>}</DIV>
<DIV>while ( $TCounter )<BR>{<BR>&nbsp;&nbsp;&nbsp; print "\tAguando fim de threads\n";<BR>&nbsp;&nbsp;&nbsp; sleep 10;<BR>}</DIV>
<DIV>sub Algumacoisa {<BR>&nbsp;&nbsp; my ($valor01, $valor02)&nbsp; = @_;<BR># Faça as coisas..<BR># e ao terminar ...<BR>lock ( $TCounter&nbsp; );<BR>$TCounter--;<BR>}<BR>&lt;/code&gt;</DIV>
<DIV>Bom, nesta primeira você viu que o elo fraco está no método 'Algumacoisa', pois se vc sair dele sem diminuir a variável $TCounter, o sistema pode entrar num loop infinito. Para contonar o o problema vc pode colocar timeout no loop.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Uma outra alternativa pode ser algo assim :<BR>&lt;code&gt;<BR>use Thread::Running qw();<BR>use threads;</DIV>
<DIV>$MaxThreads = 25;</DIV>
<DIV>for ( 1..100 ) {<BR>&nbsp;&nbsp;&nbsp; my $Thread&nbsp;&nbsp; = threads-&gt;create(\&amp;Algumacoisa, $_ );<BR>&nbsp;&nbsp;&nbsp; my @Contador = threads-&gt;list;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; while ( $#Contador &gt;= $MaxThreads ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "Aguardando liberar as threads $#Contador\n";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach ( threads-&gt;list ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (! $_-&gt;running ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "\t", $_-&gt;tid, " is not running\n";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $_-&gt;tojoin;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop @Contador;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print "\t", $_-&gt;tid, " is running\n";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; threads-&gt;yield();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 1;<BR>&nbsp;&nbsp;&nbsp; }<BR>}</DIV>
<DIV>print "Indo para o final !!\n";</DIV>
<DIV>foreach ( threads-&gt;list ) {<BR>&nbsp;&nbsp;&nbsp; print "Aguardando thread numero ", $_-&gt;tid, "\n";<BR>&nbsp;&nbsp;&nbsp; $_-&gt;join;<BR>}</DIV>
<DIV>sub Algumacoisa {<BR>&nbsp;&nbsp; my ( $valor02 )&nbsp; = shift;<BR>&nbsp;&nbsp;&nbsp; # Faça as coisas..<BR>&nbsp;&nbsp;&nbsp; # e ao terminar ...<BR>&nbsp;&nbsp;&nbsp; print "Thread de numero $valor02\n";<BR>&nbsp;&nbsp;&nbsp; sleep 10;<BR>&nbsp;&nbsp;&nbsp; print "Finalizando a thread de numero $valor02\n";<BR>}<BR>&lt;/code&gt;</DIV>
<DIV><BR>&nbsp;</DIV>
<DIV>
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#f0f0f0 border=0>
<TBODY>
<TR>
<TD width=70 bgColor=#bde9fd><FONT face="Verdana,Arial,'Trebuchet MS'" size=2><B>De:</B></FONT></TD>
<TD><FONT face="Verdana,Arial,'Trebuchet MS'" size=2>cascavel-pm-bounces@pm.org</FONT></TD></TR></TBODY></TABLE></DIV>
<DIV>
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#f0f0f0 border=0>
<TBODY>
<TR>
<TD width=70 bgColor=#bde9fd><FONT face="Verdana,Arial,'Trebuchet MS'" size=2><B>Para:</B></FONT></TD>
<TD><FONT face="Verdana,Arial,'Trebuchet MS'" size=2>cascavel-pm@pm.org</FONT></TD></TR></TBODY></TABLE></DIV>
<DIV>
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#f0f0f0 border=0>
<TBODY>
<TR>
<TD width=70 bgColor=#bde9fd><FONT face="Verdana,Arial,'Trebuchet MS'" size=2><B>Cópia:</B></FONT></TD>
<TD><FONT face="Verdana,Arial,'Trebuchet MS'" size=2></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV>
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#f0f0f0 border=0>
<TBODY>
<TR>
<TD width=70 bgColor=#bde9fd><FONT face="Verdana,Arial,'Trebuchet MS'" size=2><B>Data:</B></FONT></TD>
<TD><FONT face="Verdana,Arial,'Trebuchet MS'" size=2>Wed, 31 Aug 2005 00:15:50 -0300</FONT></TD></TR></TBODY></TABLE></DIV>
<DIV>
<TABLE cellSpacing=0 cellPadding=4 width="100%" bgColor=#f0f0f0 border=0>
<TBODY>
<TR>
<TD width=70 bgColor=#bde9fd><FONT face="Verdana,Arial,'Trebuchet MS'" size=2><B>Assunto:</B></FONT></TD>
<TD><FONT face="Verdana,Arial,'Trebuchet MS'" size=2>[Cascavel-pm] Threads</FONT></TD></TR></TBODY></TABLE></DIV>
<DIV>&gt; olá pessoal</DIV>
<DIV>&gt; </DIV>
<DIV>&gt; cá estou eu mais uma vez pedindo a ajuda para um de vocês.</DIV>
<DIV>&gt; </DIV>
<DIV>&gt; </DIV>
<DIV>&gt; preciso saber o seguinte:</DIV>
<DIV>&gt; </DIV>
<DIV>&gt; como controlar o número de threads ativos?</DIV>
<DIV>&gt; ou seja digamos que meu programa tenha o limite de 25 threads</DIV>
<DIV>&gt; e assim que um thread fechar eu abra outro ficando sempre com 25 ativos</DIV>
<DIV>&gt; alguem sabe me explicar isso ?</DIV>
<DIV>&gt; </DIV>
<DIV>&gt; modulos usados:</DIV>
<DIV>&gt; </DIV>
<DIV>&gt; use Thread;</DIV>
<DIV>&gt; use threads;</DIV>
<DIV>&gt; </DIV>
<DIV>&gt; obrigado. </DIV>
<DIV>&gt; </DIV>
<DIV>&gt; </DIV>
<DIV>&gt; _______________________________________________</DIV>
<DIV>&gt; Cascavel-pm mailing list</DIV>
<DIV>&gt; Cascavel-pm@pm.org</DIV>
<DIV>&gt; http://mail.pm.org/mailman/listinfo/cascavel-pm</DIV>