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 :

Multithreads attendre la fin d'exécution


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut Multithreads attendre la fin d'exécution
    Bonjour,

    Je fais une application qui a besoin de lancer X threads et d'attendre qu'ils aient tous finis avant d'en relancer d'autres. Mais je ne vois pas comment faire car la méthode ->join() bloque 1 thread mais pas plusieurs en même temps...

    Voici mon bout de code :
    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
    my $LEVEL = $MATRIX->{LEVEL} + 1;
     
    while ($LEVEL >= 0)
    {
    	$CPT = 0;
    	while ($CPT <= $MATRIX->{LEVEL} + 1)
    	{
    		my $thr = threads->new(sub {
    			print "Thread start\n";
    			process($MATRIX->{$CPT});
    			$MATRIX->{$CPT}->{STARTED} = 1;
    			print "Thread end\n";
    		});
    		$CPT+=1;
    	}
    	# attendre ici que tous les threads lancé dans le while d'avant soient finis
    	$LEVEL-=1;
    }

    Comment faire ça ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Sauve tous tes threads dans ton tableau et join les dans une boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_->join() foreach @thr;
    Si tu veux joiner les threads "au fur et à mesure", tu peux vérifier qu'ils sont joinable avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_->join() foreach grep $_->is_joinable(), @thr;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Merci c'est exactement ce qu'il me fallait !

    J'avais pensé à un tableau de référence de thread et appeler chaque join() mais je pensais que le join serait bloquant... mais comme on lance le thread avant pas de problème.

    En revanche je n'arrive pas à utiliser la version avec is_joinable(), j'ai le message d'erreur suivant :
    Can't locate auto/threads/is_joinable.al in @INC (...)

    Cette fonction fait elle partie du core de perl (5.8.8) (car rien n'est indiqué dans la doc perl) ?

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Tu peux toujours mettre à jour le module threads.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 129
    Points : 86
    Points
    86
    Par défaut
    Je ne peux pas, je ne dois pas ! (c'est de la prod)

Discussions similaires

  1. Attendre la fin d'exécution d'une procédure?
    Par Michelk12 dans le forum VBScript
    Réponses: 2
    Dernier message: 05/03/2014, 15h18
  2. Attendre la fin d'exécution d'un programme
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 03/02/2013, 10h42
  3. Réponses: 3
    Dernier message: 03/01/2009, 20h56
  4. [Vista]Comment attendre la fin d'exécution d'un processus ?
    Par gb_68 dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 15/06/2007, 23h17
  5. Attendre la fin d'exécution d'un page en JS
    Par TekP@f dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/08/2005, 15h15

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