【发布时间】:2016-06-03 06:01:43
【问题描述】:
我有一个存储一些数据的文件:
miscellaneous data1
文件偶尔会被打开,数据会被更改。
356
miscellaneous data2
文件中的数据将每 10 秒存储到一个变量 $fileData 中
数据存储过程
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
}
每 10 秒运行一次 storeData 的过程
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 中的值与脚本的最后一次迭代不同,它将调用 proc valueChanged? 到目前为止,我已经尝试添加跟踪命令
trace add variable fileData write "valueChanged"
调用后
every 10000 {storeData}
但即使值未更改,它也只是打印出消息。
【问题讨论】:
-
无论何时写入变量,都会调用它。即,每当您使用
set命令为跟踪变量设置值时,都会调用它。 -
我明白了,我应该改用读取操作吗?
-
不,仍然会在阅读时打印。例如,
puts $fileData将导致跟踪触发,因为它涉及读取操作。无论您对检查内容是否相同感兴趣,都必须手动检查。你甚至可能根本不需要trace。 -
在阅读文件内容的同时可以直接查看。