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 :

Segmentation fault with thread


Sujet :

Interfaces Graphiques Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut Segmentation fault with thread
    Bonjour à tous,

    j'utilise le système de threads dans un gros programme Perl/Tk et à la fermeture de mon application, j'obtiens un Segmentation fault.

    J'ai réussi à reproduire ce message sur un bout de programme nettement plus court et qui est très proche de ce qu'il y a dans le tutoriel sur les threads.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use Tk;
     
    use threads;
    use threads::shared;
     
    my %LesFonctions=("toto"=>\&toto);
    my $ThreadTravail : shared; 
    my $TuerThread : shared;
    my $nomFonction : shared;
    my @ArgumentsThread : shared; 
    my $Thread = threads->create(\&MonThread);
     
    $ThreadTravail=0;
    $TuerThread=0;
     
    my $mw = MainWindow->new;
    $mw->title(" -------------- FREE ENERGY of BINDING -------------- beta version");
     
    $mw->protocol('WM_DELETE_WINDOW' => sub{$Thread->detach();$TuerThread=1;sleep 1; exit});
     
    $mw->Button(-text=>'toto', -command=> sub {&majThread})->pack();
     
    MainLoop;
     
    sub MonThread{
     
    	while (1) {
     
    		if ( $ThreadTravail == 1 ) {
     
    		$LesFonctions{$nomFonction}->(@ArgumentsThread);
     
          		$ThreadTravail = 0;
       		 }
     
        		last if ( $TuerThread == 1 );
     
       		 sleep 1;
     	 }
      	return;
    }
     
    sub majThread {
    	$nomFonction ="toto";
    	@ArgumentsThread =(); 
    	$ThreadTravail = 1;
    }
     
    sub toto{
    print "toto
    est
    content";
    }
    }
    En fermant la fenêtre avec la croix, le Segmentation fault apparait dans le terminal.

    J'utilise Linux (GNOME 2.16.0) et la version 5.8.8 de Perl.

    Merci d'avance pour vos propositions.

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Attention, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub toto{
    print "toto est content";
    }
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sub toto{
    print "toto
    est
    content";
    }
    }
    Sinon, j'ai lancé le prog et je n'ai pas de souci sous Windows XP, perl 5.12.
    Le conseil que je te donnerai serait déjà de mettre à jour le modules threads sous ton Linux via cpan.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut
    Maj effectuée, threads 1.83 installé.
    Et le problème reste

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Mets à jour également threads::shared.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut
    Aucun changement...

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Mets ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mw->protocol('WM_DELETE_WINDOW' => sub{ $Thread->detach(); $TuerThread=1; });
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mw->protocol('WM_DELETE_WINDOW' => sub{$Thread->detach();$TuerThread=1;sleep 1; exit});

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2011
    Messages : 16
    Par défaut
    Done.

    Forcément, cela ne quitte plus l'application.
    J'ai rajouté un simple bouton exit pour quitter.

    J'ai donc testé d'appuyer sur la croix qui doit détacher le thread, j'ai attendu un temps puis j'ai appuyé sur mon bouton exit pour quitter.
    Toujours Segentation fault

Discussions similaires

  1. Segmentation fault avec threads
    Par aljekeny dans le forum Linux
    Réponses: 3
    Dernier message: 12/01/2009, 19h37
  2. Segmentation fault, trop de thread fils
    Par Galdon dans le forum Linux
    Réponses: 21
    Dernier message: 03/12/2008, 02h09
  3. Program terminated with signal 11, Segmentation fault.
    Par Micr0be dans le forum Débuter
    Réponses: 19
    Dernier message: 28/08/2008, 07h41
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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