0

我有一段代码有一个过程,我只希望过程触发,最多每 2 分钟一次。如果它在最后 2 分钟内触发,那么它应该退出。目前,它在执行之前(在 5000 之后)有一个小的延迟,但这似乎也做了,是将在静止时间(5 秒)内发生的任何其他执行请求排队,然后将排队的命令输出一连串的活动。

显然,这遗漏了很大一部分,但
我考虑过使用以下变量做一些事情:

#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 中是否有更好的方法来做到这一点。

4

1 回答 1

1

一种可能的解决方案:

set lastExecuted ""

proc foo {} {
    global lastExecuted
    set currentTimestamp [clock scan seconds]
    if {$lastExecuted != "" && ($currentTimestamp - $lastExecuted) > 120} {
        exit
    }
    set lastExecuted $currentTimestamp
    # continue execution
}
于 2016-04-18T04:43:19.957 回答