什么时候使用Wait(0)?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我有一个关于何时在 JSL 脚本中使用“Wait(0)”命令的最佳实践的问题。
我猜想有时您的脚本可能会在先前编写的脚本操作完成之前执行代码而超前,并且在此类操作之后放置 wait(x) 命令是尝试确保操作在继续之前完成的一种方法与你的脚本。
我只是想知道你什么时候应该关心这个? 例如,如果我要拆分数据表,是否需要 wait(0)? 向数据表发送“<
另外,使用 Wait(0) 时的最佳实践是什么? 我知道在等待公式在 dt 中计算的情况下,通过向数据表发送 '<< Run Formulas' 消息而不是使用 wait(0) 会更好,但在其他情况下它不是那么明确情况。
如果这看起来是一个相当广泛/模糊的讨论,我深表歉意。 这是因为我正在尝试提高脚本的执行时间,并且探查器说大量时间花费在我在上述操作类型之后插入的这些等待命令上。 我很感激对此的任何见解,或者如果有我可以查看的可用资源,那就更好了。 干杯!
回复:什么时候使用 Wait(0)?以及使用 Here 命名空间,例如 Here:myVar
回复:什么时候使用 Wait(0)?您可能希望选中该复选框。使用 Here 命名空间只是很好的编码,我鼓励您以“Names Default to Here(1);”开始所有脚本。如果您不使用此处命名空间(或您选择的命名空间),则 JMP 会将所有内容分配为全局变量。对于测试和个人代码来说,这不是什么大问题,但如果您将脚本放入加载项中,我假设它将用于生产。
使用全局命名空间肯定会给生产脚本带来问题。最常见的问题是无意中覆盖常见变量,例如“dt”或“datatable”。其他问题涉及同时运行两个脚本或插件。例如,两者都可能有 For() 循环,并且由于变量“i”通常用于 For() 循环,而“j”则用于嵌入式 For() 循环,如果它们都开始运行,您可能会发现自己正在运行无限循环,其中“i”不断被两个不同的脚本更改。
使用此处命名空间可以避免这些问题,因为只要脚本打开或运行,就会为每个脚本分配一个临时命名空间。因此,“i”对于脚本来说是本地的,您不必担心意外的重新分配。
大约有一百万种方法可以在仍然使用 Here 命名空间的情况下修复按钮框问题。将某些强大的变量名称定义为按钮可以使用的全局变量名称。定义和使用您自己的命名空间(这样您就不必提供可靠的变量名称)。重新定义按钮框脚本中的关键变量,以便在按下按钮时重新分配它们。使用 << 模态。使用 Schedule()。将变量存储在数据表中。等等。等等。
回复:什么时候使用 Wait(0)?跟进。我在这里被时间愚弄了。事实证明,插件向导中有一个奇怪的复选框:“使用这里非限定 JSL 变量名称的命名空间”。取消选中它,我的问题就消失了。这解释了为什么我的 JRN 不会在其 ButtonBox 中执行 JSL。-DJ
回复:什么时候使用 Wait(0)?我过去见过这种情况,例如从 JMP8 迁移到 JMP9,我的一些脚本无法工作,因为 JMP9 执行得太快。我记得我放置了一些 wait(0);一切都很好。
现在我有一个新的计时问题案例,非常奇怪但真实:
脚本:带有 ButtonBox 的 JRN。每个ButtonBox 执行一个JSL。
案例 1:好案例 - 如果我通过 Windows 资源管理器在 JMP 中打开 JRN,则后续的 JSL 工作正常。
案例 2:不好的案例 - 如果我打开 JRN 作为 JMP 插件菜单,它不起作用。日志似乎显示未知的显示框(这些框包含在 JSL 中的不同位置)。另外,如果我只看这两个案例,即使在我看来,案例 2 的执行速度也比案例 1 快!不,在这种情况下,所有文件引用都很好,两种情况在我的本地 PC 上使用完全相同的 JRN/JSL,甚至我告诉它在 JMP 插件中打开的方式也没有区别(无论是“path”>$ADDIN_HOME与“文本”>打开)。
因此,就我而言,似乎 JMP 加载内容的方式也与时间有关。我认为在上面的案例 2 中,JMP 能够更快地加载我的 JRN 和后续脚本,但不幸的是,它对时间产生了负面影响。无论如何,我的方法是尝试一些 wait(0);看看我是否可以稍微减慢 JMP 的速度。干杯,DJ
回复:什么时候使用 Wait(0)?”似乎你只需要遇到某些问题才能知道何时需要”...... 我同意这一点。不必要地使用等待会减慢代码速度。我仅在代码失败时才使用它,并且等待是修复它的唯一方法。
我对我的代码进行了快速搜索,这里有一些示例 - 它们都与与窗口的交互有关。我找不到任何核心 JMP 任务(例如表操作)需要等待的示例。
示例 1:更新文本框(或其他一些显示框)
执行计算密集型任务(循环)并希望将信息推送给用户 - 您需要给窗口一些呼吸时间来执行刷新(或者在此示例中,可以将“重新显示”消息发送到包含文本框的窗口)
tb估计<<设置文本( “预计完成时间=” ||查尔(预计时间) || “秒” ) ;
等待( 0 )
示例 2:使用 StatusMsg
StatusMsg 是在我们拥有 JMP 的多文档界面之前发明的,因此无法预测使用哪个窗口来显示消息。使用等待可确保您获得当前窗口的关注
等待( 0 ) ;
字符串消息= “一些消息” ;
状态消息(字符串消息) ;
示例3:动态更新内容
不是严格需要的,但可以帮助减少闪烁
(这里:远东<<孩子) <<删除;
等待( 0 ) ;
这里:远东<<附加(内容 )
其中 vlb 是 V 列表框或其他一些显示框容器
-戴夫
回复:何时使用 Wait(0)?在此示例中,从主菜单触发操作后需要wait(0)来获取当前数据表()引用的正确表:
https://community.jmp.com/t5/Discussions/run-table-script/mp/755152/highlight/true#M93767
回复:何时使用 Wait(0)?帖子删除