Wann sollte Wait(0) verwendet werden?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo alle,
Ich habe eine Frage dazu, was die beste Vorgehensweise hinsichtlich der Verwendung des Befehls „Wait(0)“ in einem JSL-Skript ist.
Ich schätze, es gibt Zeiten, in denen Ihr Skript sich selbst übertreffen kann, wenn es darum geht, Code auszuführen, bevor ein zuvor geschriebener Vorgang abgeschlossen ist, und das Einfügen eines Befehls „wait(x)“ nach solchen Vorgängen ist eine Möglichkeit, sicherzustellen, dass der Vorgang abgeschlossen wird, bevor fortgefahren wird mit deinem Skript.
Ich frage mich nur, wann Sie sich darüber Sorgen machen sollten? Wenn ich beispielsweise eine Datentabelle aufteile, benötige ich dann eine Wartezeit (0)? Wie wäre es mit dem Senden einer „<
Was ist außerdem die beste Vorgehensweise bei der Verwendung von Wait(0)? Ich weiß, dass es beim Warten auf die Auswertung von Formeln in einem dt besser wäre, wenn Sie eine „<< Run Formulas“-Nachricht an eine Datentabelle senden würden, anstatt ein wait(0) zu verwenden, aber in anderen Fällen ist das nicht so eindeutig Umstände.
Entschuldigung, wenn dies eine eher weit gefasste/vage Diskussion zu sein scheint. Das liegt daran, dass ich versuche, die Ausführungszeit meines Skripts zu verbessern, und der Profiler sagt, dass viel Zeit für diese Wartebefehle aufgewendet wird, die ich nach den oben genannten Vorgängen eingefügt habe . Ich freue mich über jeden Einblick in dieses Thema oder noch besser, wenn es Ressourcen gibt, die ich mir ansehen kann. Beifall!
Betreff: Wann sollte Wait(0) verwendet werden?Ebenso wie die Verwendung des Here-Namespace, z. B. Here:myVar
Betreff: Wann sollte Wait(0) verwendet werden?Sie möchten wahrscheinlich, dass dieses Kontrollkästchen aktiviert ist.Die Verwendung des Here-Namespace ist einfach gute Codierung und ich würde Ihnen empfehlen, alle Ihre Skripte mit „Names Default to Here(1)“ zu beginnen. Wenn Sie den Here-Namespace (oder einen Namespace Ihrer Wahl) nicht verwenden, weist JMP alles als globale Variablen zu.Für Tests und persönlichen Code ist das keine große Sache, aber wenn Sie ein Skript in ein Add-In einfügen, gehe ich davon aus, dass es für die Produktion verwendet wird.
Die Verwendung des globalen Namespace wird sicherlich zu Problemen bei Produktionsskripten führen.Das häufigste Problem ist das unbeabsichtigte Überschreiben allgemeiner Variablen wie „dt“ oder „datatable“.Andere Probleme betreffen die gleichzeitige Ausführung von zwei Skripten oder Add-Ins.Beispielsweise können beide For()-Schleifen haben, und da die Variable „i“ üblicherweise für For()-Schleifen und „j“ für eingebettete For()-Schleifen verwendet wird, wenn beide zu laufen beginnen, kann es sein, dass Sie eine Endlosschleife ausführen Schleife, in der „i“ von den beiden verschiedenen Skripten ständig geändert wird.
Durch die Verwendung des Here-Namespace werden diese Probleme vermieden, da jedem Skript ein temporärer Namespace zugewiesen wird, solange das Skript geöffnet ist oder ausgeführt wird.Somit ist „i“ lokal im Skript und Sie müssen sich keine Sorgen über versehentliche Neuzuweisungen machen.
Es gibt etwa eine Million Möglichkeiten, Ihr Problem mit der Schaltflächenbox zu beheben, während Sie weiterhin den Here-Namespace verwenden.Definieren bestimmter robuster Variablennamen als global, die die Schaltfläche verwenden kann.Definieren und Verwenden Ihres eigenen Namespace (damit Sie sich keinen robusten Variablennamen ausdenken müssen).Schlüsselvariablen im Skript der Schaltflächenbox neu definieren, sodass sie beim Drücken der Schaltfläche neu zugewiesen werden.Verwendung von << Modal.Verwenden von Schedule().Speichern von Variablen in einer Datentabelle. ect. ect.
Betreff: Wann sollte Wait(0) verwendet werden?Nachverfolgen.Ich habe mich hier über den Zeitpunkt getäuscht.Wie sich herausstellt, gibt es im Add-In-Assistenten dieses seltsame Kontrollkästchen: „Verwenden Sie das Hier Namespace für unqualifizierte JSL-Variablennamen".Deaktivieren Sie es und meine Probleme verschwanden.Dies erklärt, warum mein JRN die JSL in seiner ButtonBox nicht ausführen würde.-DJ
Betreff: Wann sollte Wait(0) verwendet werden?Ich habe dies in der Vergangenheit gesehen, beispielsweise bei der Migration von JMP8 auf JMP9. Einige meiner Skripte funktionierten nicht, da JMP9 zu schnell ausgeführt wurde.Soweit ich mich erinnere, habe ich etwas wait(0); und alles war in Ordnung.
Jetzt habe ich einen neuen Fall von Zeitproblemen, sehr seltsam, aber real:
Skript: JRN mit ButtonBoxes.Jede ButtonBox führt eine JSL aus.
Fall 1: Guter Fall – wenn ich die JRN über den Windows Explorer in JMP öffne, funktioniert die nachfolgende JSL einwandfrei.
Fall 2: Schlechter Fall – wenn ich das JRN als JMP-Add-in-Menü öffne, funktioniert es nicht.Das Protokoll scheint unbekannte Anzeigefelder anzuzeigen (die an verschiedenen Stellen in JSL enthalten sind).Wenn ich mir nur diese beiden Fälle ansehe, wird Fall 2 sogar für mich schneller ausgeführt als Fall 1!Und nein, in diesem Fall sind alle Dateiverweise in Ordnung, in beiden Fällen werden genau die gleichen JRN/JSLs auf meinem lokalen PC verwendet, und selbst die Art und Weise, wie ich es im JMP-Add-In zum Öffnen anweise, macht keinen Unterschied (ob „Pfad“ > $ADDIN_HOME vs „text“>öffnen).
In meinem Fall scheint es also, dass sogar die Art und Weise, wie JMP Dinge lädt, für das Timing von Bedeutung sein kann.Ich denke, in meinem Fall 2 oben ist JMP einfach in der Lage, mein JRN und nachfolgende Skripte viel schneller zu laden, aber es wirkt sich leider negativ auf das Timing aus.Wie auch immer, mein Ansatz wird darin bestehen, etwas wait(0); Ich möchte sehen, ob ich JMP etwas verlangsamen kann.Prost, DJ
Betreff: Wann sollte Wait(0) verwendet werden?" es scheint, dass man einfach auf bestimmte Probleme stoßen muss, bevor man weiß, wann es nötig ist“ ... Dem würde ich zustimmen.Wenn Sie unnötigerweise warten, wird Ihr Code langsamer.Ich verwende es nur, wenn mein Code fehlschlägt und das Warten die einzige Möglichkeit ist, das Problem zu beheben.
Ich habe eine schnelle Suche in meinem Code durchgeführt und hier sind einige Beispiele – sie beziehen sich alle auf Interaktionen mit Windows.Ich konnte keine Beispiele finden, bei denen zentrale JMP-Aufgaben wie Tabellenmanipulationen eine Wartezeit erforderten.
Beispiel 1: Aktualisieren eines Textfelds (oder eines anderen Anzeigefelds)
Wenn Sie eine rechenintensive Aufgabe (Schleife) ausführen und Informationen an den Benutzer weiterleiten möchten, müssen Sie Windows etwas Zeit geben, um die Aktualisierung durchzuführen (alternativ könnte in diesem Beispiel eine „Reshow“-Nachricht an das Fenster gesendet werden, das das Textfeld enthält). )
tbSchätzung << Text setzen ( „Geschätzte Zeit bis zur Fertigstellung =“ || Verkohlen ( Schätzzeit ) || „Sekunden“ ) ;
Warten ( 0 )
Beispiel 2: Verwendung von StatusMsg
StatusMsg wurde erfunden, bevor wir die Schnittstelle für mehrere Dokumente für JMP hatten, und daher ist es nicht vorhersehbar, welches Fenster zur Anzeige der Nachricht verwendet wird.Durch die Verwendung einer Wartezeit wird sichergestellt, dass Sie über die aktuelle Windows-Aufmerksamkeit verfügen
Warten ( 0 ) ;
strMessage = „Eine Nachricht“ ;
StatusMsg ( strMessage ) ;
Beispiel 3: Inhalte dynamisch aktualisieren
Nicht unbedingt erforderlich, kann aber zur Reduzierung des Flimmerns beitragen
( Hier : vlb << Kind ) << Löschen ;
Warten ( 0 ) ;
Hier : vlb << Anhängen( Inhalt )
Wobei vlb ein V-Listenfeld oder ein anderer Anzeigebox-Container ist
-Dave
Betreff: Wann soll Wait(0) verwendet werden?in diesem Beispiel ist wait(0) erforderlich, nachdem eine Aktion vom Hauptmenü aus ausgelöst wurde, um die richtige Tabelle zu erhalten, auf die durch die aktuellen Daten table() verwiesen wird:
https://community.jmp.com/t5/Discussions/run-table-script/mp/755152/highlight/true#M93767
Betreff: Wann soll Wait(0) verwendet werden?Beitrag löschen