2016-07-21 5 views
2

TCLには、変数の変更をポーリングした後で一定のアクションを実行するメカニズムがあります。TCLで変数が変更されたときに特定のアクションを実行

私はについて読んでいますが、スクリプトを一時停止しています。私は、スクリプトが実行され、その間に変数値が変更された場合、特定のアクションを実行します。

vwaitの非同期モードの種類。

答えて

4

変数をトレースすることで、変数が変更されるたびに(またはフラグに応じて読み書きが行われるたびに)何かを行うことができます。この例を試してみてください:

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 

ローカル変数をトレースすることは可能ですが、お勧めできません。また、内部では、vwaitコマンドは、変数が書き込まれるときにフラグをトリップするトレースを設定します。そのフラグは、イベント・ループが戻されたときに待機することを通知します。そのトレースは、スクリプトレベルのAPIではなく、TclのC APIを使用して設定されます。

0

また、再帰的プロシージャを使用して、変数の現在の値を特定の間隔でポーリングし、変数の特定の条件が満たされると再帰が行われます。例については

set x 1 
proc CheckVariableValue { 
    global x 
    if { $x >= 5 } { 
     puts "end" 
     return 1; 
    } 
    else{ 
     incr x 
     puts $x 
     after 1000 CheckVariableValue 
    } 
} 
CheckVariableValue 
関連する問題