Wait(0) をいつ使用するか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、みんな、
JSL スクリプトで「Wait(0)」コマンドをいつ使用するかに関するベスト プラクティスについて質問があります。
以前にスクリプト化された操作が完了する前にコードを実行するという点で、スクリプトが先を行く場合があると思います。そのような操作の後に wait(x) コマンドを置くことは、続行する前に操作が確実に完了するようにする 1 つの方法です。あなたのスクリプトで。
いつこのことを気にする必要があるのか疑問に思っています。 たとえば、データテーブルを分割する場合、wait(0) は必要ですか? 「<
また、Wait(0) を使用する場合のベスト プラクティスは何ですか? dt で数式が評価されるのを待つ場合、wait(0) を使用する代わりに '<< Run Formulas' メッセージをデータテーブルに送信するほうがよいことはわかっていますが、他の場合にはそれほど明確ではありません。状況。
これがかなり広範で曖昧な議論であるように思われる場合は、申し訳ありません。 これは、私が持っているスクリプトの実行時間を改善しようとしているという事実から生じており、プロファイラーは、上記の種類の操作の後に挿入した待機コマンドに多くの時間が費やされていると言っています。 。 これについての洞察や、さらに詳しく調べられる利用可能なリソースがあれば、よろしくお願いします。 乾杯!
Re: Wait(0) をいつ使用するか?Here 名前空間を使用するだけでなく、例: Here:myVar
Re: Wait(0) をいつ使用するか?おそらくそのチェックボックスをオンにする必要があるでしょう。Here 名前空間を使用することは優れたコーディングであり、すべてのスクリプトを「Names Default to Here(1);」で開始することをお勧めします。 here ネームスペース (または選択したネームスペース) を使用しない場合、JMP はすべてをグローバル変数として割り当てます。テストや個人のコードの場合、これは大した問題ではありませんが、スクリプトをアドインに組み込む場合は、それが運用環境で使用されると想定されます。
Global 名前空間を使用すると、運用スクリプトで問題が確実に発生します。最も一般的な問題は、「dt」や「datatable」などの一般的な変数を意図せずにオーバーライドしてしまうことです。その他の問題には、2 つのスクリプトまたはアドインを同時に実行することが関係します。たとえば、両方に For() ループがある可能性があり、変数 "i" は一般的に For() ループに使用され、"j" は埋め込み For() ループに使用されるため、両方が実行を開始すると、無限ループが実行される可能性があります。 2 つの異なるスクリプトによって「i」が変更され続けるループ。
Here 名前空間を使用すると、スクリプトが開いているか実行している限り、各スクリプトに一時的な名前空間が割り当てられるため、これらの問題が回避されます。したがって、「i」はスクリプトに対してローカルであり、誤って再割り当てされることを心配する必要はありません。
Here 名前空間を使用しながらボタン ボックスの問題を解決する方法は約 100 万通りあります。ボタンが使用できる特定の堅牢な変数名をグローバルとして定義します。独自の名前空間を定義して使用します (したがって、堅牢な変数名を考え出す必要はありません)。ボタン ボックスのスクリプトでキー変数を再定義し、ボタンが押されたときに再割り当てされるようにします。<< モーダルを使用します。Schedule() を使用します。変数をデータテーブルに保存します。など。など。
Re: Wait(0) をいつ使用するか?ファローアップ。ここでタイミングについて騙されました。結局のところ、アドイン ウィザードにはこの奇妙なチェックボックスがあります。ここ修飾されていない JSL 変数名の名前空間」。チェックを外すと問題は解決しました。これは、私の JRN が ButtonBox で JSL を実行しない理由を説明しています。-DJ
Re: Wait(0) をいつ使用するか?私は過去にこれを経験しました。たとえば、JMP8 から JMP9 への移行では、JMP9 の実行が速すぎるため、スクリプトの一部が機能しませんでした。思い出したように、wait(0); をいくつか設定しました。そしてすべてうまくいきました。
今、私は新しいタイミングの問題のケースを抱えています。これは非常に奇妙ですが現実です:
スクリプト: ButtonBox を使用した JRN。各 ButtonBox は JSL を実行します。
ケース 1: 良いケース - Windows エクスプローラー経由で JRN を JMP に開くと、後続の JSL は正常に動作します。
ケース 2: 悪いケース - JRN を JMP アドイン メニューとして開くと、機能しません。ログには、不明な表示ボックス (さまざまな時点で JSL に含まれています) が表示されているようです。また、これら 2 つのケースだけを見ると、私の目にもケース 2 の方がケース 1 よりも高速に実行されています。そして、いいえ、この場合、すべてのファイル参照は問題ありません。どちらの場合も、ローカル PC 上でまったく同じ JRN/JSL を使用しており、JMP アドインで開くように指示する方法でも違いはありません ("path">$ADDIN_HOME かどうか)。 vs "text">open)。
したがって、私の場合、JMP がどのようにロードするかさえもタイミングに影響を与える可能性があるようです。上記のケース 2 では、JMP は JRN と後続のスクリプトをはるかに高速にロードできるだけだと思いますが、残念ながらタイミングに悪影響を及ぼします。とにかく、私のアプローチは、 wait(0) を試してみることです。 JMP の速度を少し遅くできるかどうかを確認してください。乾杯、DJ
Re: Wait(0) をいつ使用するか?」いつそれが必要になるかを知る前に、特定の問題に遭遇する必要があるようです... 私もそれに同意します。不必要に待機を使用すると、コードの速度が低下します。コードが失敗し、それを修正する唯一の方法が待機である場合にのみこれを使用します。
コードを簡単に検索してみたので、いくつかの例を示します。それらはすべてウィンドウとの対話に関連しています。テーブル操作などのコア JMP タスクで待機が必要な例は見つかりませんでした。
例 1: テキスト ボックス (またはその他の表示ボックス) を更新する
計算負荷の高いタスク (ループ) を実行し、ユーザーに情報をプッシュしたい場合 - 更新を実行するためにウィンドウに一定の呼吸時間を与える必要があります (あるいは、この例では、テキスト ボックスを含むウィンドウに「再表示」メッセージを送信することもできます) )
tb推定<<テキストの設定( "完了までの推定時間 = " ||シャア(推定時間) || 「秒」 ) ;
待って( 0 )
例 2: StatusMsg の使用
StatusMsg は、JMP の複数ドキュメント インターフェイスが登場する前に発明されたものであるため、メッセージの表示にどのウィンドウが使用されるかは予測できません。Wait を使用すると、現在のウィンドウに確実に注意を向けることができます。
待って( 0 ) ;
strメッセージ= 「何かのメッセージ」 ;
ステータスメッセージ( strメッセージ) ;
例 3: コンテンツを動的に更新する
厳密には必要ありませんが、ちらつきを軽減するのに役立ちます
(ここ: vlb <<子供) <<消去;
待って( 0 ) ;
ここ: vlb <<追加(コンテンツ )
ここで、vlb は V リスト ボックスまたはその他の表示ボックス コンテナです。
-デイブ
Re: Wait(0) はいつ使用すればよいですか?この例では、メインメニューからアクションをトリガーした後、現在のデータ table()によって参照される適切なテーブルを取得するためにwait(0) が必要です。
https://community.jmp.com/t5/Discussions/run-table-script/mp/755152/highlight/true#M93767
Re: Wait(0) はいつ使用すればよいですか?投稿削除