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 :

Problème de Thread


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut Problème de Thread
    Bonjour,

    Je travaille sur une application TK.

    J'ai un soucis sur une partie.
    J'exécute une commande à l'aide d'un telnet. Cette commande prend du temps pour s'exécuter (20 mins). Durant ce temps, je souhaite exécuter d'autres fonctions et afficher le résultat dans mon application.

    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
     
    sub fonction(){
        #Je lance une commande qui va s'exécuter 20 mins par l'intermédiaire de telnet
       telnet.....
       print "Fonction très longue";
     
       #Je veux lancer une autre fonction
       #Cette fonction lance une autre commande avec telnet, 
       #récupère le résultat et l'affiche dans mon application
     
       my $t1=threads->new(\&fonction2);
       $t1->join;
     
       #Affichage du résultat de la commande très longue
       # dans mon application
    }
    J'ai plusieurs problèmes.
    Tout d'abord, mon application reste "bloquée", et le résultat d'exécution de la fonction 2 ne s'affiche pas dans mon application (je n'ai pas la main sur l'application).

    Ensuite, j'ai un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Thread 1 terminated abnormally : not a CODE reference at ...
    Free to wrong pool ....
    Je ne comprends pas pourquoi.
    Quand je teste mes 2 fonctions séparemment, il n'y a pas de soucis.

    Vous avez une idée?
    Merci,
    Lucie

  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
    Je te recommande plutôt d'utiliser un fork(), de maintenir un pipe entre les deux (cf "perldoc perlipc") et de vérifier périodiquement avec select() s'il y a des données disponible sur ce pipe (Je crois même que Tk::FileEvent doit être capable de le faire pour toi).

    --
    Jedaï

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Mais c'est vraiment compliqué. Je suis allée sur la perldoc, je vais faire des essais.
    Je trouvais que les threads étaient plus simple à mettre en place.

    Lucie

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Par défaut Problème de Fork()
    Bonjour,

    Je travaille sur une application TK.

    J'ai besoin de fork pour pouvoir lancer des fonctions durant l'exécution d'une autre.

    Ma fonction ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub fonction(){
       while (boucle non infinie){
           #traitement de la fonction
           unless (fork){
               fonction2();
           }
           wait; #Je veux que la fonction2 soit terminée
       }
    }
    Quand j'exécute, mon programme s'arrête net à l'instruction unless(fork).
    Il ne veut pas exécuter le fork et je ne comprend pas pourquoi.

    J'ai testé le fork dans un fichier vierge, ça marchait.
    Mais quand je l'inclus à mon programme, ça ne fonctionne plus.

    Vous avez une idée?

    Merci,
    Lucie

Discussions similaires

  1. Problème de thread : Plus de ressources système
    Par OliverSleep dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2006, 15h35
  2. [VB.NET] Problème de Thread
    Par Sadneth dans le forum ASP.NET
    Réponses: 26
    Dernier message: 31/01/2006, 10h12
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 16h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

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