0

我有一个用于测试自动化的 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

4

1 回答 1

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在命令变得可调用的地方调用(你可能可以很好地描述它)。

于 2019-06-05T13:24:26.427 回答