Perl Tk错误“共享标量的值无效”

时间:2013-08-09 15:48:07

标签: multithreading perl tk perltk

我的程序中存在标量问题。

我得到了这样的代码:

use threads;
use threads::shared;
use Tk;
$mw = new MainWindow;
my $label = undef;
share($label) my $ok = undef;
share($ok)

HERE IS BUTTON WITH OPTION -command => \&sub1

threads->create('sub2');

sub sub1 {
    $top   = $mw->TopLevel();
    $label = $top->Label( -text => 'something' )->pack();
    $ok    = 1;
}

sub sub2 {
    while (1) {
        if ($ok) {
            $label->configure( -text => 'i need this' );
            $label->update;
        }
    }
}

我在$label->configure(-text => 'i need this');中遇到错误:

Invalid value for shared scalar at xxx.pl

我只需要从线程更新我的标签文本,我不能这样做。

感谢您的建议。

1 个答案:

答案 0 :(得分:2)

该错误表明Tk标签对象并不是为了支持在ithreads下共享而编写的,这种情况我认为非常难以弥补。

我建议你做一个线程负责更新UI小部件并让该线程从其他线程接收更新指令。尴尬,但可行。