什麼時候使用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)才能取得目前資料 table()引用的正確資料表:
https://community.jmp.com/t5/Discussions/run-table-script/mp/755152/highlight/true#M93767
回覆:什麼時候使用 Wait(0)?發布刪除