У меня есть файл, хранящий некоторые данные:Использование трассировки для вызова прок, когда значение переменной изменяется TCL
miscellaneous data1
Файл будет иногда открыт и данные будут изменены.
356
miscellaneous data2
данные в файле будут храниться в переменной $ FILEDATA каждые 10 секунд
хранения процедураданных
proc storeData {} {
global fileData
if {[info exists fileData]} {
set fileData ""
}
set fp [open file1.txt r]
while {[gets $fp data] > -1} {
lappend fileData $data\n
}
close $fp
}
Процедура для запуска StoreData каждые 10 секунд
proc every {ms body} {
if 1 $body
after $ms [list after idle [info level 0]]
}
every 10000 {storeData}
Процедура для вызова, когда значение в FILEDATA изменяется
proc valueChanged {} {
puts "Value in fileData has changed."
}
Как применить команду трассировки таким образом, что если значение в FILEDATA отличается от последней итерации сценария, он будет вызывать процедурный ValueChanged? До сих пор я попытался добавить команду трассировки
trace add variable fileData write "valueChanged"
после вызова
every 10000 {storeData}
но это просто распечатав сообщение, даже если значение не изменяется.
Всякий раз, когда переменная записывается это будет называться.т. е. всякий раз, когда вы используете команду 'set' для установки значения для отслеживаемой переменной, это будет вызываться. – Dinesh
Я вижу, должен ли я использовать операцию чтения? – James
Нет, все равно это будет напечатано всякий раз, когда он читается. Например, 'puts $ fileData' приведет к тому, что трассировка будет вызвана, так как она включает операцию чтения. Независимо от того, что вас интересует с точки зрения проверки содержимого, это то же самое или другое, вы должны вручную проверить его. Возможно, вам даже не понадобится «trace». – Dinesh