2013-08-09 2 views
0

J'ai rencontré un problème avec les scalaires dans mon programme.Erreur Perl Tk "Valeur non valide pour le scalaire partagé"

J'ai obtenu le code comme ceci:

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; 
     } 
    } 
} 

Je suis erreur dans $label->configure(-text => 'i need this'); comme ceci:

Invalid value for shared scalar at xxx.pl

Je dois mettre à jour seulement mon texte de l'étiquette de fils et je ne peux pas faire ce.

Merci pour les conseils.

Répondre

2

Cette erreur suggère que Tk objets d'étiquetage étaient tout simplement pas écrit à la pension alimentaire est partagé sous ithreads, une circonstance qui je suppose est très difficile d'y remédier.

Je suggérerais plutôt que vous fassiez un thread responsable de la mise à jour des widgets de l'interface utilisateur et que ce thread reçoive des instructions de mise à jour provenant d'autres threads. Bizarre, mais réalisable.

Questions connexes