Thread Tk Objekt zwischen Threads "sharen" (1 answers)
Opened by Gast at 2007-05-07 14:42

Gast Gast
 2007-05-07 14:42
#76506 #76506
Hallo,

nachdem mir hier mit meinem ersten Problem schon sehr geholfen wurde, möchte ich noch einmal Eure Hilfe in Anspruch nehmen.
Ich habe ein Tk-Canvasobjekt erstellt, in das durch zwei parallel laufende Threads gezeichnet werden soll. Das Canvas wird in meinem Hauptthread erzeugt und soll durch einen unterthread bearbeitet werden. das Canvas habe ich global vor den Threadinstanzierungen über my $Canvas definiert. Wenn ich nun mittles unterthread eine Linie im Canvas zeichnen möchte , erhaöte ich folgende Fehlermeldung:
Code: (dl )
Thread failed to start: Can't call method "createLine" on an undefined value at C:\neu3.pl line 302, <DATA> line 164.


Und hier nochmal die entsprechenden Code Stellen:
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
my $mw;
my $ControlFrame;
my $ControlGraphFrame;
my $Canvas;
.
.
.
#Aufruf in MainThread:

$ControlFrame = $mw->Frame( -borderwidth=>'2', -label=>"Kontrollelemente")->pack(-side=>'bottom', -expand=>'1', &n
bsp; &n
bsp; -fill=>'both');

$ControlGraphFrame = $ControlFrame->Frame( -borderwidth=>'2', &n
bsp; &n
bsp; -background=>'white',-label=>"Graph")->pack( -side=>'top',-expand=>'1',-fill=>'both');





$Canvas=$ControlGraphFrame->Scrolled('Canvas',-background=>'white',-height=>$graphYSize+20,-width=>$graphXSize)->pack(-fill=>'both');

.
.
.
#und hier der unterthread:

sub GraphThread{
require Tk;
Tk->import;

while (1)
{
if ($var==1)
{
print "thread doing work\n";
{
sleep(1);
$newValue = &Measure; &nbsp
; $newDraw=$graphYSize/(1<<$resolution) * $newValue;

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



printf "%u - %u\n", $oldValue, $newValue;

$scaleLine = $Canvas->createLine(10,10,$graphXSize,10);



$count += $xShift;

$oldValue = $newValue;
}
}
elsif($var == 0)
{
print "thread waiting\n";
sleep(1);
}
else
{
print "thread finished\n";
return;
}
}
}


Ich hoffe mal dir Formatierung blieb wenigstens etwas erhalten.
Und bitte entschuldigt, dass ich mit so scheinbar "banalen" Fragen ankomme, aber ich mach das nur im Rahmen eines Praktikums, wobei ich eigentlich in C programmiere.

mfg und Danke für die Hilfe.

Simon

View full thread Tk Objekt zwischen Threads "sharen"