Quando usare Wait(0)?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Ho una domanda su quale sia la migliore pratica riguardo a quando utilizzare il comando "Attendi (0)" in uno script JSL.
Immagino che ci siano momenti in cui il tuo script può anticipare se stesso in termini di esecuzione del codice prima che un'operazione precedentemente programmata sia stata completata e inserire un comando wait (x) dopo tali operazioni è un modo per provare a garantire che l'operazione venga completata prima di continuare con la tua sceneggiatura
Mi chiedevo solo quando dovresti preoccuparti di questo? Ad esempio, se sto suddividendo un datatable, ho bisogno di un wait(0)? Che ne dici di inviare un messaggio '<
Inoltre, qual è la migliore pratica quando si tratta di utilizzare un Wait(0)? So che nel caso di attesa delle formule da valutare in un dt, sarebbe meglio inviare un messaggio '<< Esegui formule' a un datatable invece di utilizzare un wait(0), ma non è così chiaro in altri circostanze.
Mi scuso se questa sembra una discussione piuttosto ampia/vaga. Deriva dal fatto che sto cercando di migliorare il tempo di esecuzione di uno script che ho, e il profiler sta dicendo che si sta spendendo molto tempo su questi comandi di attesa che ho inserito dopo il tipo di operazioni sopra menzionate . Apprezzo qualsiasi intuizione in merito o se ci sono risorse disponibili che posso esaminare, anche meglio. Saluti!
Re: Quando usare Wait(0)?Oltre a utilizzare lo spazio dei nomi Here, ad esempio Here:myVar
Re: Quando usare Wait(0)?Probabilmente vuoi che la casella di controllo sia selezionata.L'uso dello spazio dei nomi Here è solo un buon codice e ti incoraggio a iniziare tutti i tuoi script con "Nomi predefiniti per qui (1);" Se non utilizzi lo spazio dei nomi here (o uno spazio dei nomi di tua scelta), JMP assegnerà tutto come variabili globali.Per il test e il codice personale questo non è un grosso problema, ma se stai inserendo uno script in un componente aggiuntivo presumo che verrà utilizzato per la produzione.
L'uso dello spazio dei nomi globale darà sicuramente problemi agli script di produzione.Il problema più comune è l'override involontario di variabili comuni, come "dt" o "datatable".Altri problemi riguardano l'esecuzione simultanea di due script o componenti aggiuntivi.Ad esempio, entrambi possono avere cicli For() e poiché la variabile "i" è comunemente usata per i cicli For() e "j" per i cicli For() incorporati se entrambi iniziano a funzionare, potresti ritrovarti a eseguire un infinito ciclo in cui "i" continua a essere modificato dai due diversi script.
L'utilizzo dello spazio dei nomi Here evita questi problemi poiché a ogni script viene assegnato uno spazio dei nomi temporaneo finché lo script è aperto o in esecuzione.Pertanto, "i" è locale rispetto allo script e non dovrai preoccuparti di riassegnazioni accidentali.
Esistono circa un milione di modi per risolvere il problema della casella dei pulsanti mentre si utilizza ancora lo spazio dei nomi Here.Definire determinati nomi di variabili robuste come globali che il pulsante può utilizzare.Definire e utilizzare il proprio spazio dei nomi (quindi non è necessario trovare un nome di variabile robusto).Ridefinire le variabili chiave nello script della casella del pulsante in modo che vengano riassegnate quando viene premuto il pulsante.Usando << Modale.Utilizzo di Schedule().Memorizzare le variabili in una tabella di dati. ecc. ecc.
Ri: Quando usare Wait(0)?Seguito.Sono stato ingannato qui sui tempi.A quanto pare c'è questa strana casella di controllo nella procedura guidata Addin: "Usa il file Qui namespace per nomi di variabili JSL non qualificati".Deselezionalo e i miei problemi sono scomparsi.Questo spiega perché il mio JRN non esegue il JSL nel suo ButtonBox.-dj
Re: Quando usare Wait(0)?L'ho visto in passato, ad esempio dalla migrazione da JMP8 a JMP9, alcuni dei miei script non funzionavano poiché JMP9 veniva eseguito troppo velocemente.Se ricordo bene, ho inserito alcuni wait(0); e tutto andava bene.
Ora ho un nuovo problema di temporizzazione, molto strano ma reale:
script: JRN con ButtonBox.Ogni ButtonBox esegue un JSL.
Caso 1: buon caso: se apro il JRN tramite Esplora risorse in JMP, il JSL successivo funziona correttamente.
Caso 2: Bad Case - se apro JRN come menu JMP Addin, non funziona.Il registro sembra mostrare caselle di visualizzazione sconosciute (che sono contenute in JSL in vari punti).Inoltre, se guardo solo questi due casi, il Caso 2 si sta eseguendo più velocemente del Caso 1 anche ai miei occhi!E no, in questo caso tutti i riferimenti ai file vanno bene, entrambi i casi usano esattamente gli stessi JRN/JSL sul mio PC locale, e anche il modo in cui gli dico di aprirsi nel componente aggiuntivo JMP non fa differenze (se "percorso"> $ ADDIN_HOME vs "testo">aperto).
Quindi, nel mio caso, sembra che anche il modo in cui JMP carica le cose possa avere importanza per i tempi.Penso che nel mio caso 2 sopra, JMP sia in grado di caricare il mio JRN e gli script successivi molto più velocemente, ma sfortunatamente influisce negativamente sui tempi.Ad ogni modo, il mio approccio sarà provare alcuni wait(0); per vedere se riesco a rallentare un po' JMP.ciao, dj
Re: Quando usare Wait(0)?" sembra che devi solo imbatterti in alcuni problemi prima di sapere quando è necessario"... Sono d'accordo con quello.L'utilizzo inutilmente di un'attesa rallenterà il codice.Lo uso solo se il mio codice fallisce e l'attesa è l'unico modo per risolverlo.
Ho fatto una rapida ricerca sul mio codice e qui ci sono alcuni esempi: si riferiscono tutti alle interazioni con Windows.Non sono riuscito a trovare alcun esempio in cui le attività principali di JMP come le manipolazioni delle tabelle necessitassero di un'attesa.
Esempio 1: aggiornamento di una casella di testo (o di un'altra casella di visualizzazione)
Eseguendo un'attività computazionalmente intensiva (loop) e volendo inviare informazioni all'utente - è necessario concedere a Windows un po' di respiro per eseguire l'aggiornamento (in alternativa in questo esempio un messaggio di "reshow" potrebbe essere inviato alla finestra contenente la casella di testo )
tbStima << Imposta testo ( "Tempo stimato per il completamento =" || Car ( tempo stimato ) || "secondi" ) ;
Aspettare ( 0 )
Esempio 2: utilizzo di StatusMsg
StatusMsg è stato inventato prima che avessimo l'interfaccia a più documenti per JMP e quindi è imprevedibile quale finestra viene utilizzata per visualizzare il messaggio.L'uso di un'attesa garantisce di avere l'attenzione di Windows corrente
Aspettare ( 0 ) ;
strMessage = "Qualche messaggio" ;
StatoMsg ( strMessage ) ;
Esempio 3: aggiornamento dinamico dei contenuti
Non strettamente necessario ma può aiutare a ridurre lo sfarfallio
( Qui : vlb << Bambino ) << Eliminare ;
Aspettare ( 0 ) ;
Qui : vlb << Aggiungere( contenuto )
Dove vlb è una casella di riepilogo V o qualche altro contenitore di casella di visualizzazione
-Dave
Ri: Quando utilizzare Wait(0)?in questo esempio è necessario wait(0) dopo aver attivato un'azione dal menu principale per ottenere la tabella corretta a cui fa riferimento il dato corrente table() :
https://community.jmp.com/t5/Discussions/run-table-script/mp/755152/highlight/true#M93767
Ri: Quando utilizzare Wait(0)?posta elimina