Schrift
[thread]5089[/thread]

Tk & threads: shared variable in Label?



<< >> 5 Einträge, 1 Seite
pktm
 2005-09-23 21:14
#44629 #44629
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich möchte gerne, dass eine Variable, die in einem Thread modifiziert wird in einem anderen Thread in einem Label angezeigt wird.

Bislang sieht das bei mir so aus:
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
#!/Perl/bin/perl

use strict;
use warnings;
use threads;
use threads::shared;

my $runs : shared = 0;
my $thr1 = threads->new(\&startGui, \$runs);
my $thr2 = threads->new(\&startRequest, \$runs);

$thr1->join();
$thr2->join();

sub startGui {
require Tk;
my $mw = Tk::MainWindow->new();
$mw->packPropagate(0);
$mw->Label(-textvariable => \$runs)->pack();
$mw->MainLoop();
} # /startGui

sub startRequest {
while(1) {
$runs++;
print "run $runs\n";
sleep(1);
}
} # /startRequest


Aber das Label verändert sich genau einmal.
Aber wo liegt der Fehler?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-09-23 23:33
#44630 #44630
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich vermute, dass Tk mit der shared variable probleme hat...
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
use warnings;
use strict;

use threads;
use threads::shared;

my $runs : shared = 0;
#my $thr1 = threads->new(\&startGui, \$runs);
my $thr2 = threads->new(\&startRequest, \$runs);

#$thr1->join();

my $x = 0;
require Tk;
my $mw = Tk::MainWindow->new();
$mw->packPropagate(0);
$mw->Label(-textvariable => \$x)->pack();
$mw->repeat(200, sub { $x = $runs; $mw->update });
$mw->MainLoop();

$thr2->join();


sub startRequest {
while(1) {
lock $runs;
$runs++;
print "run $runs\n";
sleep(1);
}
} # /startRequest
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pktm
 2005-09-23 23:50
#44631 #44631
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, da bekommt die Aussage, dass Tk nicht threadsafe ist gleich viel mehr Gewicht.
Ich denke, ich werde einen Hash sharen, da es ja doch eine ganze Menge an Daten ist, was ich da in dem Thread verändere.

Danke & Grüße,
pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2005-09-23 23:57
#44632 #44632
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Kurze Frage, wozu muss man lock $runs; ?
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-09-24 02:01
#44633 #44633
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
der lock ist hier ueberfluessig, da die Variable im Hauptthread nicht veraendert wird. lock ist sowas aehnliches wie flock, halt nur fuer threads. unlock gibt es leider nicht, sondern der lock bleibt bis ende des blockes aktiv. siehe perldoc threads::shared
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 5 Einträge, 1 Seite



View all threads created 2005-09-23 21:14.