PDA

Visualizza la versione completa : problema thread


thegiova
21-11-2008, 15:19
HO un problema con i thread

io mi creo due thread, uno legge da una socket, l'altro fa dei controlli sul tempo.
Entrambi i processi devono settare una variabile comune, nel mio caso si chiama "$pusa".

il problema è che ognuno sembra si legga la sua, io vorrei invece condividerla, ho letto che si dovrebbe usare shared, ma non funziona.
Qualcuno ha esperienza in questa cosa?



#!/usr/bin/perl -w

use IO::Socket;
use Time::CTime;
use threads;



my $pusa : shared = time;
my $sock : shared = new IO::Socket::INET(
PeerAddr => '10.220.20.122',
PeerPort => '5003',
Proto => 'tcp',
)
or die "Impossibile creare il socket: $!\n" unless $sock;;





sub tempo2 {
my ($pusa) = shift;
my $t = time;
my $op = $t - $pusa;
print "tempo2; $t - MODIFICA:$pusa = $op\n";
return $op;

}

sub setPusa {
lock($pusa);
$pusa = time;
}

sub gestioneParallela {
print "--------->Thred Parallela\n";
$intervallo=0;
$loop=1;
while($loop == 1){
$intervallo = &tempo2($pusa);
print "--------->Thred Parallela: intervallo = $intervallo\n";
if($intervallo > 10){
print "--------->Thred Parallela: INVIO CARATTERE\n";
&setPusa;
#lock $sock;
#print $sock "prova";
#lock $pusa;
}
sleep(6);
}
}

sub socketRead {
print "--------->Thred socket\n";
while (<$sock>){
&setPusa;
print "--------->Thred socket: $_ MODIFICA:$pusa\n";

}
print "\nSocket down porta 5003\n";
}

# Creazione dei thread
my $a : shared = 2;
my $thr2 = threads->new(\&gestioneParallela);
my $thr1 = threads->new(\&socketRead);
$thr1->join;
$thr2->join;
print "$a\n";


close($sock);

thegiova
21-11-2008, 15:37
ok, ho risolto inserendo use threads::shared;

ora devo trovare il modo di condividere la socket, perchè quando il secondo thread conta n secondi deve inviare un messaggio verso il server...

qua non mi risponde nessuno? un guru di perl non c'è?

Loading