从 运行 停止 tcl 过程比每 2 分钟一次更规律,不管它被调用的频率如何
stop tcl procedure from running more regularly than once every 2 minutes, regardless of how often it is called
我有一段代码有一个过程,我只想让这个过程触发一次,最多每2分钟一次。如果它在最后 2 分钟内触发,那么它应该退出。目前它在执行之前有一个小的延迟(在 5000 之后),但这似乎也是如此,将在停顿时间(5 秒)内发生的任何其他执行请求排队然后在一连串 activity.
中敲出排队的命令
显然这缺少了很大一部分,但是
我考虑过用变量做一些事情,比如:
#gets current time since epoch as var0
set timer0 clock format [clock seconds] -format %s
#gets current time since epoch as var1
set timer1 clock format [clock seconds] -format %s
#calculates elapsed time since epoch in seconds, converts seconds to minutes
set split [ expr (($timer0 - $timer1)/60)/60 ]
if { $split > 2 } {
my_proc $maybe_1var $maybe_2vars $maybe_3vars
} else {
exit super gracefully
}
如果您愿意,我可以提供我当前代码的片段。它远没有我想象的那么优雅,而且我不确定在 Tcl 中是否有更好的方法来做到这一点。
一种可能的解决方案:
set lastExecuted ""
proc foo {} {
global lastExecuted
set currentTimestamp [clock scan seconds]
if {$lastExecuted != "" && ($currentTimestamp - $lastExecuted) > 120} {
exit
}
set lastExecuted $currentTimestamp
# continue execution
}
我有一段代码有一个过程,我只想让这个过程触发一次,最多每2分钟一次。如果它在最后 2 分钟内触发,那么它应该退出。目前它在执行之前有一个小的延迟(在 5000 之后),但这似乎也是如此,将在停顿时间(5 秒)内发生的任何其他执行请求排队然后在一连串 activity.
中敲出排队的命令显然这缺少了很大一部分,但是
我考虑过用变量做一些事情,比如:
#gets current time since epoch as var0
set timer0 clock format [clock seconds] -format %s
#gets current time since epoch as var1
set timer1 clock format [clock seconds] -format %s
#calculates elapsed time since epoch in seconds, converts seconds to minutes
set split [ expr (($timer0 - $timer1)/60)/60 ]
if { $split > 2 } {
my_proc $maybe_1var $maybe_2vars $maybe_3vars
} else {
exit super gracefully
}
如果您愿意,我可以提供我当前代码的片段。它远没有我想象的那么优雅,而且我不确定在 Tcl 中是否有更好的方法来做到这一点。
一种可能的解决方案:
set lastExecuted ""
proc foo {} {
global lastExecuted
set currentTimestamp [clock scan seconds]
if {$lastExecuted != "" && ($currentTimestamp - $lastExecuted) > 120} {
exit
}
set lastExecuted $currentTimestamp
# continue execution
}