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 :

Détection Evènement fileevent


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Points : 19
    Points
    19
    Par défaut Détection Evènement fileevent
    Bonjour,

    Je n'arrive pas à faire fonctionner fileevent. Je suis sous Windows. Je ne passe pas du tout dans la fonction action_lecture.

    Quelqu'un aurait une idée ?

    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
     
    sub sauvegarde {
      my ($roText,$h) ;
      $f->destroy if Exists($f) ;
      $f = $mw->Frame(-background => 'white')->pack ;
      $roText = $f->Scrolled('ROText')->pack ;
     
     
      open $h, "perl boucle.pl|" or die "Echec tube $!";
     
      $mw->fileevent($h,'readable', [ \&action_lecture , $h , $roText ] ) ;
    }
     
    sub action_lecture {
      my ($h,$roText) = @_ ;
                                               print STDERR "ici\n" ;
                                               my $ligne = <$h> ;
                                               print 'Ligne lue : ' . $ligne ;
                                               $roText->insert('end',$ligne) ;
    }
    Merci

  2. #2
    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 : 499 184
    Points
    499 184
    Par défaut
    As tu avancé sur ton souci ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Oui j'ai avancé. D'après Mastering perltk, cela ne fonctionne pas sous windows.
    Et ça n'a pas changé depuis la parution du bouquin visiblement.
    Ou alors qqchose m'a échappé, c'est une autre possibilité.

    Mais j'ai résolu le pb facilement en utilisant un repeat qui va lire toutes les n millisecondes.

    Il s'agit de lancer une sauvegarde non bloquante :

    Extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     $f = $frameBg->Frame(-background => 'white')->pack ;
      $f->Label(-text => 'Commandes -> Sauvegarder', -anchor => 'w')->pack(-fill=>'both') ;
      $roText = $f->Scrolled('ROText')->pack ;
     
      $pid = open $h, "perl sauvegarde.pl|" ;
      die "Echec tube $!" unless $pid ;
      print "PID : $pid" ;
     
      if ($^O =~ /MSWin32/) {
        $idRepeat = $mw->repeat(2000 => [ \&action_lecture , $h , $roText ] )
      } else {
        $mw->fileevent($h,'readable', [ \&action_lecture , $h , $roText ] ) ;
      }
    La lecture :

    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
     
    sub action_lecture {
      my ($h,$t) = @_ ;
      my ($status, $datas) ;
     
      ($status = sysread( $h, $datas, 4096)) ;
      # Fin de fichier ou erreur
      if ( ! $status) {
        if ($^O =~ /MSWin32/ ) {
          # Annuler le repeat
          $mw->afterCancel($idRepeat) ; 
        } else { # unix/linux
          # Annuler fileevent
          $mw->fileevent($h,'readable', "" ) ;
          $t->insert('end',"\nSauvegarde terminée\n") ;
        }
      } else { $t->insert('end',$datas) ; }
    }

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

Discussions similaires

  1. détection de player
    Par mat10000 dans le forum Flash
    Réponses: 8
    Dernier message: 23/10/2003, 16h36
  2. Détection MySql
    Par gjullien dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/08/2003, 18h15
  3. Evènement sur clic droit !?
    Par soccersoft dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/12/2002, 21h39
  4. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 19h32
  5. Détection de 2 touches appuyées
    Par cyrose dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 16h25

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