【发布时间】:2019-10-20 19:16:39
【问题描述】:
我有一个用于测试自动化的 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
}
电话来自实时电脑
【问题讨论】:
-
你需要更具体一点:长进程调用到底是什么?
exec'ing 在某处,一个 C 实现的 Tcl 命令?在同一个脚本执行中,您的重入问题不会发生(脚本只会阻塞多长时间)。或者,如果long_process调用在某种程度上是非阻塞的(根据您的描述,它不是)。只有当整个脚本作为不同的第二个进程执行时才会发生这种情况(一个tclsh执行的脚本被第二个相同的脚本所超越)。 -
如果是这种情况,Donal 的回答将无济于事(模式变量在一次脚本执行后看不到)。
-
我将代码更新为机器人,以更好地显示操作系统发生的情况。调用来自在实时环境中运行的模拟。proc 注册要从中读取的值,然后在循环中读取它们。如果在注册和读取之间进行第二次调用,则对 Registster 的第二次调用将失败,并且尝试读取它们时出现错误。在第二次调用返回第一次之后继续并完成 wothout 错误。
-
缺少的部分是对
MyProc的调用究竟是如何产生的?带有 proc 的脚本是如何准确执行的?我知道您提到了CarMaker及其ScriptControl,但除非有人对CarMaker的内部工作有背景信息(没有购买该产品的可用文档),否则我们都不会能够提供帮助。
标签: tcl scriptcontrol