IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Passage de paramètres entre thread


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bluecurve
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 68
    Par défaut Passage de paramètres entre thread
    Je cherche des infos sur comment passer des paramètres d'un thread A (principale) a un thread B je n'ai pas encore commencé a coder mon applie car j'ai ce problème qui ce pose et donc me bloque .

    Thx

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Tu peux par exemple utiliser des queues comme Thread::Queue en procure. J'ai aussi vu un excellent module pour faire des communications complexes entre les threads récemment : Thread::Queue::Duplex. Mais si tes besoins sont basiques, tu peux te contenter de Thread::Queue qui fait partie de la distribution de Perl standard.

    --
    Jedaï

  3. #3
    Membre confirmé Avatar de bluecurve
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 68
    Par défaut
    J'ai un petit soucie avec Thread::Queue je n'arrive pas a passer des objets du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $objet = { clef => valeur };

    voici mon code de teste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #!/usr/bin/perl -w
    use threads;
    use diagnostics;
    use Thread::Queue;
    use Data::Dumper;
     my $Dataqueue = Thread::Queue->new;
     
     my $thr = threads->new(sub {
         while ($element = $Dataqueue->dequeue) {
              my $d = Data::Dumper->new([$element], [qw(foo *ary)]);
              print $d->Dump;
          }
        });
     
     test();
     sub test {
        my @l = qw/ ah ai at /;  
        foreach my $ii (@l) {
          $Dataqueue->enqueue($ii);   
        }
     }
     
     test2();
     
     sub test2 {
       my $bidon = {
          boulout => "ggrr"            
        };
       $Dataqueue->enqueue($bidon); 
     }
     
     $thr->join;

    perl me renvoie le message suivant du au passage de $bidon

    Uncaught exception from user code:
    Invalid value for shared scalar at H:/Program Files/Perl/lib/Thread/Queue.pm line 90.
    at H:/Program Files/Perl/lib/Thread/Queue.pm line 90
    Thread::Queue::enqueue('Thread::Queue=ARRAY(0x1fb22e0)', 'HASH(0x1f690d8)') called at C:\Documents and Settings\BlueCurve\Bureau\thread.pl line 31
    main::test2() called at C:\Documents and Settings\BlueCurve\Bureau\thread.pl line 25
    $foo = 'ah';
    $foo = 'ai';
    $foo = 'at';
    A thread exited while 2 threads were running at C:\Documents and Settings\BlueCurve\Bureau\thread.pl line 4153.
    merci de votre aide

  4. #4
    Membre confirmé Avatar de bluecurve
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 68
    Par défaut
    j'ai trouvé la solition il suffit d'utiliser Storable


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #!/usr/bin/perl -w
    use threads;
    use diagnostics;
    use Thread::Queue;
    use Thread::Semaphore;
    use Data::Dumper;
    use Storable ();
     my $Semaphore = Thread::Semaphore->new(0);
     my $Dataqueue = Thread::Queue->new;
     
     my $thr = threads->new(sub {
         my $element = {};
         while ($element = Storable::thaw( $Dataqueue->dequeue) ) {
            my $d = Data::Dumper->new([$element], [qw(foo *ary)]);
              print $d->Dump;
          }
        });
     test2();
     sub test2 {
       my $bidon = {
          teste => "ggrr"            
                   };
       $Dataqueue->enqueue( Storable::nfreeze($bidon) );
     }
     
     $thr->join;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C] passage de paramètre entre thread
    Par aziatedu13 dans le forum Linux
    Réponses: 4
    Dernier message: 29/01/2008, 17h39
  2. Passage de paramètres entre page
    Par philou8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/01/2006, 19h54
  3. passage de paramètre entre formulaire et état
    Par thufir hawat dans le forum IHM
    Réponses: 13
    Dernier message: 21/12/2005, 23h32
  4. [jsp][servlet]passage de paramètre entre deux frames
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 29/06/2004, 12h14
  5. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 14h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo