Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: perl/Tk Entry widget displays wrong value when -textvariable is shared

by zentara (Archbishop)
on Sep 02, 2010 at 17:30 UTC ( #858613=note: print w/ replies, xml ) Need Help??


in reply to perl/Tk Entry widget displays wrong value when -textvariable is shared

You are ecncountering a problem with threads:shared hashes where only the first level keys get shared by default. When you run as shared, the $top_hash{A}{B} gets ignored as being shared, while it runs fine in normal perl.

To amplify a bit, the Tk eventloop will never respond to a change in threads shared variables, when they are across thread boundaries. You don't have actual threads here, but you need to setup a timer, to read for any changes in the shared variable. So you can't use tied variables effectively across threads without timers. Try this:

#!/usr/bin/perl use warnings; use strict; use threads; use threads::shared; use Tk; my %top_hash; share $top_hash{'A'}{'B'}; $top_hash{'A'}{'B'} = 'Original'; my $t = MainWindow->new()->Scrolled('Text')->pack(); my $e = $t->Entry(-textvariable => \$top_hash{'A'}{'B'}); $t->windowCreate('end', -window => $e); $t->insert('end', "\n"); my $timer = $t->after(3000,sub{$top_hash{'A'}{'B'} = 'Changed'}); MainLoop;

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh


Comment on Re: perl/Tk Entry widget displays wrong value when -textvariable is shared
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://858613]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (10)
As of 2015-07-29 17:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (266 votes), past polls