0

我的程序中有标量问题。

我得到这样的代码:

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

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

感谢您的建议。

4

1 回答 1

2

该错误表明TkLabel 对象根本不是为了支持在 ithreads 下共享而编写的,我猜这种情况很难补救。

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

于 2013-08-09T15:56:53.603 回答