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.
En fermant la fenêtre avec la croix, le Segmentation fault apparait dans le terminal.
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"; } }
J'utilise Linux (GNOME 2.16.0) et la version 5.8.8 de Perl.
Merci d'avance pour vos propositions.
Partager