Visualizzazione dei risultati da 1 a 2 su 2

Discussione: problema thread

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    17

    problema thread

    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);

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    17
    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'è?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.