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

Interfaces Graphiques Perl Discussion :

Perl Tk executer des tâches en arriere plan sans bloquer le programme main


Sujet :

Interfaces Graphiques Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Perl Tk executer des tâches en arriere plan sans bloquer le programme main
    Bonjour ,

    Je suis un debutant en perl Tk , je voudrais créer une interface perl Tk sous windows) qui collecte des informations depuis des routeurs Cisco et les afficher (j utilise Net::Tenlet::Cisco).Jusque la pas de probléme mais lorsque l utilisateur click sur un bouton Connect par example le programme se block j'usqua avoir une reponse telnet et fin du traitment , j'ai essaye de creer un message d'attente comme progressBar mais la bar ne progress qu'aprés la fin du telnet.
    J'ai essayer plusieurs methodes DoOneEvent() mais j'ai pas bien compris lutilisation
    LE thread sous windows me cause des probléme aussi .je demande si qualq'un peux avoir une autre idéé .
    Merci.
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #########################################
    use Connexion;    # Connexion use Net::Telnet::Cisco 
    use WaitFrame ;   # composite Frame (affiche un progressBar et un              #message avec 2 methodes avance() et stop())
    use Tk ; 
     
    $main = MainWindow->new();
    $main->geometry("550x350");
     
    $main->title("Application Test Telnet");
     
    $main->Button(
                        -text=>"Connect",
                        -command=>\&getVersion
                       )->pack() ; 
     
     
    MainLoop;
     
    sub getVersion() 
    {
     
          $fr_wait = $main->WaitFrame()->pack() ; 
          $fr_wait->avance() ; 
          $main->update ;
     
     
          $this = Connexion->new();
          $this->setHost('192.168.1.10');
          $this->setLogin('root');
          $this->setPassword('Admin');
          $this->setEnable('Admin');
     
          if ( !$this->connect() ) { print $this->getLastMsg(); exit; }
     
          %version = $this->getVersion() ;
          $this->disconnect();
     
          $fr_wait->stop() ; 
     
          foreach my $tab ( keys %version ) {
    	  print "\n.$tab=>" . $version{$tab}; 
        }
     
     
     
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Deux solutions soit tu fork() soit tu utilis les threads dans ce cas met a jour la lib la dernière version est la 1.58 il me semble.

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour la reponse.
    Fork() sous Windows je pense pas que c une bonne idée
    Je vais plutôt continuer avec les threads.
    Encore merci.

  4. #4
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    y a til qulequ'un qui pourra me donner un example en utilsant soit tk:after ou bien thread ou une autre solution qui marche
    J'ai toujours un problem (la barre ne progresse qu'a la fin de la requete telnet)
    Merci

  5. #5
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Qu'est ce que tu as essayé de faire ? De toute façon tu ne pourras pas avoir une "vraie" barre de progression car tu ne sais pas combien de temps la connexion va prendre, tu ne peux que faire avancer la barre régulièrement et la faire reprendre au début si elle atteint la fin (avec after() appelant after() tant que la connexion n'est pas finie).

    --
    Jedaï

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Salut

    au faite je rencontre 2 problemes :
    1 - quand je suis la demarche suivante :
    $main->after('100',\&startProgress) ;
    @config=$telnet ->getConfig() #une requete telnet qui dure au moins 10 seconde
    # une fois les donnés recuperés ...

    &stopProgress () ; # j'arrette la progression

    => Normalement je devrais savoir le moment d'arreter la barre de progression
    Ms le probleme est que la barre ne progresse qu'a la fin de la requete ?
    secondo lors de l'execution de la requete on a l'impression que programme se plante pour un moment ?
    j'espere que c un peu plus clair?
    Merci.

  7. #7
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Oui, c'est pour ça qu'on t'as dit d'utiliser les threads ou un fork() (fork marche sous Windows au fait : c'est simulé en utilisant des threads).

    --
    Jedaï

Discussions similaires

  1. Executer des tâches en parallèle [Timer]
    Par zakarota dans le forum Général Java
    Réponses: 1
    Dernier message: 06/07/2011, 14h01
  2. Réponses: 6
    Dernier message: 20/08/2010, 08h56
  3. [Access] Tâches en arriere plan
    Par mpascolo dans le forum Access
    Réponses: 9
    Dernier message: 23/08/2006, 16h29
  4. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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