Tout d'abord, ceci est une suite à une question précédente de mine.Accéder à l'étendue de la classe Itcl dans le fil Tcl
Je voudrais utiliser le threading dans Tcl mais en collaboration avec Itcl.
Voici un exemple:
package require Itcl
package require Thread
::itcl::class ThreadTest {
variable thread [thread::create {thread::wait}]
variable isRunning 0
method start {} {
set isRunning 1
thread::send $thread {
proc loop {} {
puts "thread running"
if { $isRunning } {
after 1000 loop
}
}
loop
}
}
method stop {} {
set isRunning 0
}
}
set t [ThreadTest \#auto]
$t start
vwait forever
Cependant, lorsque l'instruction de condition tente d'exécuter et de vérifier si la variable isRunning
est vrai, je reçois une telle erreur variable. Je comprends que c'est parce qu'un proc a seulement accès à la portée globale. Cependant, dans cette situation, je voudrais contenir la variable locale à la classe.
Existe-t-il un moyen d'accomplir ceci?
Notez que vous devez passer le handle d'objet '$ this' à l'autre thread pour qu'il sache ce qui se passe. Utiliser 'list' pour construire ce message est la méthode la plus simple pour bien faire les choses, même si cela ne peut que créer des commandes uniques. –
Le vraiment paranoïaque utiliserait [[thread :: id], $ this' comme le handle, mais s'il n'y a qu'un seul maître qui n'est pas un gros problème. –