Thread [threads] Tk : Thread/Sub Array (2 answers)
Opened by testy at 2013-11-29 23:06

testy
 2013-11-29 23:06
#172331 #172331
User since
2013-11-27
4 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

vermutlich habe ich noch ein Verständisproblem.
Beim Druck auf dem Button, warum ist mein Array leer, wenn ich das Update (Zeile 39) aus dem als Thread gestarteten sub aufrufe?
Wenn ich das Update aus dem Hauptprogramm mache (Zeile 19) ist das Array beim betätigen vom Button gefüllt.

Hat sicherlich zu tun mit dem Thread und der Sichtbarkeit/shared, aber irgendwie verstehe ich es noch nicht..

Kann mir jemand mal aushelfen?

Danke ;-)

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
#!/usr/local/bin/perl -w
use Tk;
use strict;
use vars qw( $mw );
use vars qw( $b_array);
use Data::Dumper;
use threads;
use threads::shared;

my @array = ();

threads->new(\&mysub);

$mw = MainWindow->new( -relief => 'flat' );
$mw->geometry('50x50+50+50');

$b_array = $mw->Button( -pady => '1', -relief => 'sunken', -padx => '1', -state => 'normal', -justify => 'center', -text => 'Array', -command => \&button_pressed )->place( -x => 25, -y => 25);

#&UpdateArray("YES"); #=> from here is OK when button_pressed

MainLoop();

sub button_pressed {
print Dumper(\@array);
}

sub UpdateArray {
my $data = $_[0];

my $j = 0;
for (my $i=0; $i<length($_[0]);$i=$i+1){
$array[$i][$j]= $data;
$j++;
}
print Dumper(\@array);
}

sub mysub {
&UpdateArray("NO"); #=> array is empty when button_pressed
}


modedit Editiert von GwenDragon: Titel erweitert
Last edited: 2013-11-29 23:14:08 +0100 (CET)

View full thread [threads] Tk : Thread/Sub Array