Bueno, finalmente modificando la posición de "lock" conseguí que me funcionara bien. Por lo visto la variable se bloquea durante todo el bloque donde está referenciada y eso hizo que se ralentizarán y se pegaran entre los dos
threads (os envío código correcto para quien quiera...)
Ahora tengo un problemilla distinto.
Arranco el servidor (o sea ejecuto el programa y comienzan ambos
threads, entre ellos el del servidor). Lo dejo ahí y al cabo de unas horas de no haber recibido
requests lo vuelvo a mirar y el servidor ya se ha caído... ¿alguien sabe por qué?
Se supone que mi programa tiene que tener "siempre" el servidor encendido, no debería parar a no ser que haya un error de ejecución del segundo
thread, que esto no ha pasado en ninguna ocasión ya que no había
requests durante ese tiempo...
¿Alguna sugerencia o explicación de por qué?
Using perl Syntax Highlighting
################
#package server#
################
package MyWebServer
;
use base
qw(HTTP
::Server::Simple::CGI);
sub handle_request
{
my ($self, $cgi) = @_;
if ($signal eq 0
){
lock
($signal);
$signal = 1;
print "signal server: $signal \n";
}
$countSignals++;
print "contador señales: $countSignals";
my $timerequest = `date '+%d/%m/%y%H%M%S'`;
print "\n $timerequest receiving signal";
}
1;
######
#main#
######
my $httpPublisher = threads
->new(\&listenToSignal);
my $httpConsumer = threads
->new(\&updateCube);
my @returned_data_http = $httpPublisher->join;
my @returned_data_update = $httpConsumer->join;
#################
#subroutines for threads#
#################
sub listenToSignal
{
MyWebServer
->new(8084
)-> run();
}#end sub
sub updateCube
{
$updateCube = 0;
############
#control of signal#
############
while ('para siempre') {
if ($signal > 0
){
$updateCube = 1;
lock
($signal);
$signal = 0;
print "signal update cube: $signal \n";
}
if ($updateCube == 1
){
$updateCube = 0;
# do work.....}
}
}Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4