我有一个用于测试自动化的tcl脚本(带有CarMaker ScriptControl接口(
在脚本中,我调用了一个 proc,其中执行了一些代码,可能需要几毫秒才能返回。但是,如果在此进程的某个点再次调用它,则第二次调用将失败并导致错误。
我无法控制何时调用 proc,因为这些调用来自另一个应用程序。我正在寻找一种防止在执行代码的某个部分时发生对函数的并行调用的方法。
像这样:
proc MyProc {args} {
#Execute Code
set val 0
#---this part should not be interrupt
#Execute non interrupt Code
RegisterQuantities ($names)
Foreach name {
ReadQuantity $name
}
#------------------------------------
return val
}
这些呼叫来自实时 PC
最简单的方法是创建一个全局变量,该变量说明代码是否已达到可以有效调用该过程的点:
variable ready_for_call 0
proc ReadyForCall {} {
variable ready_for_call
set ready_for_call 1
}
proc MyProc {args} {
variable ready_for_call
if {!$ready_for_call} {
# I don't know if you want a warning, or an error, or silent ignoring
puts stderr "WARNING: called MyProc too early"
# You might need to return a dummy value here; the default is an empty string
return
}
#Execute Code
...
}
然后,您需要做的就是在命令变为可调用的位置调用ReadyForCall
(您可能可以很好地描述这一点(。