• Publicidad

Multihilos

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Multihilos

Notapor jimr1984 » 2014-09-24 18:09 @798

Estimados, tengo el siguiente código:
#!/usr/bin/perl

use strict;
use threads;
use LWP::UserAgent;
use HTTP::Request;
use threads::shared;
#my $compartida :shared = 0;
my @vector : shared;

my ($URL3,$URL2,$URL1,$idvotacion,$opcion,$min,$max);

$idvotacion = "541bac86e4b088456e71d59c";
$URL1 = "http://www.easypolls.net/poll?command=getPoll&pollId=".$idvotacion;
$URL2 = "http://www.eassypolls.net/podll?command=getPoll&pollId=".$idvotacion;
my $y = @vector;
my $r = int(rand($y));
$URL3 = "http://www.easypolls.net/poll?multResp=0&pollId=".$idvotacion."&pollKey=".$vector[$r]."&command=saveResponse";

print scalar(localtime),"\n";
my $c = 0;

threads->create('Obtener_PollKey',$URL1,1,10); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia
#threads->create('Obtener_PollKey',$URL1,1,3); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia
#threads->create('Obtener_PollKey',$URL1,4,6); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia
#threads->create('Obtener_PollKey',$URL1,7,9); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia
#threads->create('Obtener_PollKey',$URL1,10,13); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia
#threads->create('Obtener_PollKey',$URL1,14,16); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia

#threads->create('Realizar_Votacion',$URL3,1,16); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia

threads->create('Realizar_Votacion',$URL3,1,10); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia




while(threads->list(threads::running)){ #Nos da un listado de las funciones corriendo.
sleep 1;
}

map { $_->join(); } threads->list(threads::joinable); #Finalizamos las funciones que se encuentran en memoria.



for (my $i=0; $i < @vector ; $i++)
{
print "[".$i."] ".$vector[$i]."\n";

}
sub Obtener_PollKey
{
my ($url,$min,$max) = @_;
for ($min; $min < $max ; $min++ ) {
my $ua = LWP::UserAgent->new;
# $ua->proxy('http','http://200.84.78.117:8080');
$ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
my $req = HTTP::Request->new(GET => $url);
my $response = $ua->request($req);
my $content = $response->content();
my $status = $response->code();

if ($content =~ /(\"pollKey\":\")(.+)*$\"\,\"(a)/)
{

$vector[$min] = $2;

}

}
}


sub Realizar_Votacion
{

my ($url,$min,$max,$proxy) = @_;
for ($min; $min < $max ; $min++ ) {
my $ua = LWP::UserAgent->new;
# $ua->proxy('http','http://200.84.78.117:8080');

$ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
my $req = HTTP::Request->new(GET => $url);
my $response = $ua->request($req);
my $content = $response->content();
my $status = $response->code();

print "[URL VOTACION ] ".$url . "\n[CODIGO DE RESPUESTA ]= ".$status."\n";
my $y = @vector;
my $r = int(rand($y));
print "aleatorio".$vector[$r]."\n";

}


}

Por favor, si pueden ayudarme con un ejemplo básico.
Necesito lo siguiente, por favor:
Que se ejecuten dos hilos paralelos, A y B. Cada hilo tener un @vectorglobal. El hilo A llena el vector del 1 al 10 y el hilo B llena de 11 al 20.
Cuando ambos hilos TERMINEN se ejecute OTROS hilos C y D.
El C consume o muestre los números del vector del 1 al 10 y el D muestre del 11 al 20.

Por favor, si pueden ayudarme, gracias...
Última edición por explorer el 2014-09-24 18:22 @807, editado 2 veces en total
Razón: sgte => siguiente; codigo => código; basico => básico; numeros => números
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Publicidad

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado