Thread Perl Threads per Button steuern (2 answers)
Opened by Gast at 2007-05-03 17:21

Gast Gast
 2007-05-03 17:21
#76408 #76408
Hi, ich habe eine Anwendung mit Perl / Tk erstellt, die Daten als Graph in einem Canvas-Widget visualisiert. Die Zeichnung des Graphe wird in einem Thread erledigt, der über einen Button aufgerufen wird und soll durch einen zweiten Button wieder beendet werden. Das starten de sThread sklappt ohne Probleme, jedoch nicht das beenden. Der Thread läuft dann nach Aufruf nach wie vor. den entsprechenden Code hab ich hier mal angeklebt:

Code: (dl )
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# Starten der Messung
my $StartButton = $ControlFrame->Button(-text =>"Messung starten",
-command =>\&StartThr1)->pack;


# Beenden der Messung
my $StopButton = $ControlFrame->Button( -text => "Messung beenden",


-command=>\&SetKillFlag)->pack;

.
.
.

#-----------------------
# sub: Measure()
#-----------------------
# Aufgabe:
# Führt eine einmalige Messung aus
sub Measure{
#open( DATEI, ">$fileName") || die("Datei $fileName kann nicht geöffnet werden\n");

$ob->write('m');
&_wait;
$input = $ob->input;


return $input;
}



#-----------------------
# sub: RunMeasure()
#-----------------------
# Aufgabe:
# "Messschleife"
sub RunMeasure{

my $stat = $_[0];
my $wait = $_[1];
$count = 0;

while( $count < 1000 )
{

&_wait;
&_wait;
&_wait;
&_wait;
$newValue = &Measure;

my $newDraw = $graphYSize/(1<<$resolution) * $newValue;
my $oldDraw = $graphYSize/(1<<$resolution) * $oldValue;

$lineId = $Canvas->createLine($count,500-$oldDraw,$count+$xShift,500-$newDraw);


$count += $xShift;


$oldValue = $newValue;

print $killFlag;
}


return;

}

.
.
.

sub SetKillFlag{
$killFlag = 1;

}

sub StartThr1{
$thr1 = threads->create('RunMeasure');
$thr1->detach;
}

View full thread Perl Threads per Button steuern