2016-07-21 10 views
2

In TCL haben wir einen Mechanismus, der die Variablenänderung abfragt und danach bestimmte Aktionen ausführt.bestimmte Aktion ausführen, wenn Variable in TCL geändert wird

Ich habe über vwait gelesen, aber es ist das Skript pausieren. Ich möchte, dass das Skript ausgeführt wird und dazwischen, wenn sich der Variablenwert ändert, bestimmte Aktionen ausführen.

Art des asynchronen Modus von vwait.

Antwort

4

Sie können eine Ablaufverfolgung an eine Variable anhängen, so dass Sie sofort etwas tun können, wenn die Variable geändert wird (oder abhängig von Flags, gelesen oder gelöscht). Probieren Sie dieses Beispiel aus:

set abc 123 
proc exampleCallback args { 
    global abc 
    puts "The variable abc is now $abc" 
} 
trace add variable abc write exampleCallback 
incr abc 
incr abc 
incr abc 

Es ist möglich, lokale Variablen zu verfolgen, aber nicht empfohlen. Außerdem setzt intern der Befehl vwait eine Ablaufverfolgung, die nur ein Flag auslöst, wenn die Variable geschrieben wird; Dieses Flag signalisiert die Wartezeit bis zum Ende der Ereignisschleife. Es kommt einfach vor, dass diese Ablaufverfolgung mit Tcl C-API, nicht seine API auf Skriptebene ...

0

Sie können auch eine rekursive Prozedur verwenden, um Abfragen für den aktuellen Wert einer Variablen in einem bestimmten Intervall und beugen aus der Rekursion, sobald eine bestimmte Bedingung für die Variable erfüllt ist.

Beispiel:

set x 1 
proc CheckVariableValue { 
    global x 
    if { $x >= 5 } { 
     puts "end" 
     return 1; 
    } 
    else{ 
     incr x 
     puts $x 
     after 1000 CheckVariableValue 
    } 
} 
CheckVariableValue