¿Cuándo usar Wait(0)?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola a todos,
Tengo una pregunta sobre cuál es la mejor práctica con respecto a cuándo usar el comando 'Esperar (0)' en un script JSL.
Supongo que hay momentos en los que su secuencia de comandos puede adelantarse a sí misma en términos de ejecución de código antes de que se complete una operación previamente programada, y poner un comando de espera (x) después de tales operaciones es una forma de tratar de garantizar que la operación se complete antes de continuar. con tu guión.
Me pregunto cuándo deberías preocuparte por esto. Por ejemplo, si estoy dividiendo una tabla de datos, ¿necesito una espera (0)? ¿Qué tal enviar un mensaje '<
Además, ¿cuál es la mejor práctica cuando se trata de usar Wait(0)? Sé que en el caso de esperar a que las fórmulas se evalúen en un dt, sería mejor que enviara un mensaje '<< Ejecutar fórmulas' a una tabla de datos en lugar de usar una espera (0), pero no es tan claro en otros circunstancias.
Disculpas si esto parece una discusión bastante amplia/vaga. Se deriva del hecho de que estoy tratando de mejorar el tiempo de ejecución de un script que tengo, y el generador de perfiles dice que se está gastando mucho tiempo en estos comandos de espera que he insertado después del tipo de operaciones mencionadas anteriormente. . Agradezco cualquier información sobre esto o si hay recursos disponibles que pueda consultar, incluso mejor. ¡Salud!
Re: ¿Cuándo usar Wait(0)?Además de usar el espacio de nombres Here, por ejemplo, Here:myVar
Re: ¿Cuándo usar Wait(0)?Probablemente desee marcar esa casilla de verificación.Usar el espacio de nombres Here es simplemente una buena codificación y le recomiendo que comience todos sus scripts con 'Nombres predeterminados aquí (1);' Si no usa el espacio de nombres aquí (o un espacio de nombres de su elección), JMP asignará todo como variables globales.Para las pruebas y el código personal, esto no es un gran problema, pero si está colocando un script en un complemento, supongo que se utilizará para la producción.
El uso del espacio de nombres global seguramente generará problemas para los scripts de producción.El problema más común es anular involuntariamente variables comunes, como "dt" o "datatable".Otros problemas implican ejecutar dos scripts o complementos al mismo tiempo.Por ejemplo, ambos pueden tener bucles For(), y dado que la variable "i" se usa comúnmente para bucles For() y "j" para bucles For() incrustados si ambos comienzan a ejecutarse, es posible que se encuentre ejecutando un ciclo infinito. bucle donde "i" sigue siendo cambiado por los dos scripts diferentes.
El uso del espacio de nombres Here evita estos problemas, ya que a cada secuencia de comandos se le asigna un espacio de nombres temporal siempre que la secuencia de comandos esté abierta o en ejecución.Por lo tanto, "i" es local para el script y no tendrá que preocuparse por reasignaciones accidentales.
Hay alrededor de un millón de formas de solucionar el problema del cuadro de botones sin dejar de usar el espacio de nombres Aquí.Definir ciertos nombres de variables robustos como globales que el botón puede usar.Definición y uso de su propio espacio de nombres (para que no tenga que crear un nombre de variable sólido).Redefinir las variables clave en el script del cuadro del botón para que se reasignen cuando se presiona el botón.Usando << Modal.Usando Horario().Almacenamiento de variables en una tabla de datos. ect. ect.
Re: ¿Cuándo usar Wait(0)?Hacer un seguimiento.Me engañaron aquí sobre el tiempo.Resulta que esta extraña casilla de verificación en el asistente de complementos: "Usar el Aquí espacio de nombres para nombres de variables JSL no calificados".Desmarque y mis problemas desaparecieron.Esto explica por qué mi JRN no ejecutaría el JSL en su ButtonBox.-DJ
Re: ¿Cuándo usar Wait(0)?He visto esto en el pasado, ejemplo de la migración de JMP8 a JMP9, algunos de mis scripts no funcionaron porque JMP9 se estaba ejecutando demasiado rápido.Según recuerdo, coloqué en alguna espera (0); y todo estuvo bien
Ahora tengo un nuevo caso de problema de sincronización, muy extraño pero real:
guión: JRN con ButtonBoxes.Cada ButtonBox ejecuta un JSL.
Caso 1: buen caso: si abro el JRN a través del Explorador de Windows en JMP, el JSL subsiguiente funciona bien.
Caso 2: Mal caso: si abro el menú JRN como JMP Addin, no funciona.El registro parece mostrar cuadros de visualización desconocidos (que están contenidos en JSL en varios puntos).Además, si solo observo estos dos casos, ¡el Caso 2 se está ejecutando más rápido que el Caso 1, incluso para mí!Y no, en este caso todas las referencias de archivos están bien, ambos casos usan exactamente los mismos JRN/JSL en mi PC local, e incluso la forma en que le digo que se abra en el complemento JMP no hace ninguna diferencia (ya sea "ruta">$ADDIN_HOME vs "texto">abrir).
Entonces, en mi caso, parece que incluso la forma en que JMP carga las cosas puede ser importante para el momento.Creo que en mi Caso 2 anterior, JMP solo puede cargar mi JRN y las secuencias de comandos posteriores mucho más rápido, pero desafortunadamente afecta el tiempo de manera negativa.De todos modos, mi enfoque será intentar esperar (0); Es para ver si puedo ralentizar JMP un poco.saludos, dj
Re: ¿Cuándo usar Wait(0)?" parece que solo tienes que encontrarte con ciertos problemas antes de saber cuándo es necesario"... Estoy de acuerdo con eso.Usar una espera innecesariamente ralentizará su código.Solo lo uso si mi código falla y la espera es la única forma de solucionarlo.
Hice una búsqueda rápida en mi código y aquí hay algunos ejemplos: todos se relacionan con interacciones con Windows.No pude encontrar ningún ejemplo en el que las tareas básicas de JMP, como la manipulación de tablas, necesitaran una espera.
Ejemplo 1: actualizar un cuadro de texto (o algún otro cuadro de visualización)
Al realizar una tarea computacionalmente intensiva (bucle) y querer enviar información al usuario, debe darle a Windows un respiro para realizar la actualización (alternativamente, en este ejemplo, se podría enviar un mensaje de "remostrar" a la ventana que contiene el cuadro de texto )
tbestimar << Establecer texto ( "Tiempo estimado de finalización = " || Carbonizarse ( Tiempo estimado ) || " segundos" ) ;
Esperar ( 0 )
Ejemplo 2: uso de StatusMsg
StatusMsg se inventó antes de que tuviéramos la interfaz de documentos múltiples para JMP, por lo que es impredecible qué ventana se usa para mostrar el mensaje.El uso de una espera garantiza que tenga la atención actual de Windows
Esperar ( 0 ) ;
strMensaje = "Algún mensaje" ;
Mensaje de estado ( strMensaje ) ;
Ejemplo 3: Actualización dinámica de contenido
No es estrictamente necesario, pero puede ayudar a reducir el parpadeo
( aquí : vlb << Niño ) << Borrar ;
Esperar ( 0 ) ;
aquí : vlb << Adjuntar( contenido )
Donde vlb es un cuadro de lista V o algún otro contenedor de cuadro de visualización
-David
Re: ¿Cuándo utilizar Wait(0)?en este ejemplo, se necesita esperar (0) después de activar una acción desde el menú principal para obtener la tabla correcta a la que hace referencia la tabla de datos actual() :
https://community.jmp.com/t5/Discussions/run-table-script/mp/755152/highlight/true#M93767
Re: ¿Cuándo utilizar Wait(0)?eliminar publicación