防止在执行代码的某些部分之前重复调用proc

时间:2019-06-05 09:28:13

标签: tcl scriptcontrol

我有一个用于自动化测试的tcl脚本(带有CarMaker ScriptControl接口)

在脚本中,我正在调用proc,在其中执行一些代码可能需要几毫秒的时间,然后它才能返回。但是,如果在此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,

1 个答案:

答案 0 :(得分:1)

执行此操作的最简单方法是创建一个全局变量,该变量说明代码是否已到达可以有用地调用该过程的地步:

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(您可能可以很好地描述其特征)。