2013-08-09 2 views
0

У меня возникла проблема со скалярами в моей программе.Ошибка Perl Tk «Недопустимое значение для общего скаляра»

Я получил код, как это:

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

Мне нужно обновить текст метки только из ниток и я не могу сделать это.

Спасибо за советы.

ответ

2

Эта ошибка говорит о том, что объекты Tk этикетки просто не были написаны для поддержки общего доступа под ithreads, обстоятельство, которое я предполагаю, что это очень трудная для исправления.

Я бы предложил вместо этого создать поток, отвечающий за обновление виджетов пользовательского интерфейса, и чтобы эта нить получала инструкции по обновлению от других потоков. Неловко, но работоспособно.

 Смежные вопросы

  • Нет связанных вопросов^_^