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.