Saltar al contenido principal

Cómo se ejecutan los scripts

  • Un subproceso por ejecución. Cada script que se activa se ejecuta en un subproceso propio, con sus propias variables y cachés de enumeración. Dos gestos que se activan casi a la vez se ejecutan al mismo tiempo. Un bloqueo con nombre evita que intercalen el trabajo compartido. Un monitor serie es la excepción: sus líneas se ejecutan de una en una, en el orden en que llegaron.
  • Un script puede bloquearse. UtilityWait, los cuadros de mensaje, un ShellRunProgram que espera a que el programa termine y las lecturas serie bloquean el subproceso de su propio script y nada más. La entrada del mouse y del teclado sigue fluyendo.
  • Detención. La tecla de acceso rápido para detener todas las acciones y EngineStopAllActions() terminan cada script en ejecución en su siguiente instrucción, así que un bucle infinito siempre se puede detener. UtilityWait, el bloqueo y las esperas serie, un ShellRunProgram que espera a que el programa termine, ShellShowToast, MultimediaPlayMp3File y UIShowConsole también detectan una solicitud de detención mientras esperan. Los últimos cuatro devuelven entonces false, y ShellRunProgram deja el programa en ejecución. Las demás funciones integradas terminan primero su llamada actual.
  • Lo que persiste entre ejecuciones:
    • Storage*: valores con nombre de cualquier tipo, compartidos por todos los scripts y guardados en memoria mientras el motor esté en ejecución. StorageGetValue de un nombre que nunca se estableció devuelve Integer 0. Contiene hasta 1,024 valores, con nombres de hasta 256 caracteres y Text de hasta 32,768 caracteres; superar un límite detiene la acción con un error.
    • Propiedades de ventana (WindowSetPropertyInteger/…Text): valores asociados a una ventana que desaparecen cuando esta se cierra o cuando Input.Observer se cierra. Un valor de texto tiene como máximo 1,024 caracteres, y se pueden almacenar hasta 512 valores de texto a la vez.
    • Temporizadores con nombre, vigilancias de carpeta y monitores serie, que el motor mantiene en ejecución después de que termina el script que los creó.
  • Scripts pasados como Text. TimerCreate, FolderWatchCreate y SerialMonitorCreate reciben un script como argumento Text. Se compila y se ejecuta por separado cada vez que se activa, así que tiene variables nuevas y no puede ver las variables del script que lo creó. Las comillas dentro de él necesitan la secuencia de escape \"; también puede guardar el script en un snippet y pasar SnippetGetScript("name").
  • Contexto. Las funciones integradas Context* describen lo que activó la ejecución actual: el gesto, sus puntos y su rectángulo delimitador, la ventana y el control que están debajo, el botón, el evento de la vigilancia o la línea serie. El script de un temporizador no tiene contexto de disparador. El script de una vigilancia de carpeta recibe los valores ContextGetWatch*, y el de un monitor serie, los valores ContextGetSerial*.
  • Los snippets son scripts con nombre guardados en la configuración. SnippetExecuteScript ejecuta uno hasta el final antes de que continúe el script que lo llama, y devuelve true solo cuando el snippet se ejecutó hasta el final. Comparte el contexto de disparador del script que lo llama, pero tiene sus propias variables.
  • El modo seguro bloquea todos los scripts excepto los que se ejecutan desde la consola de diagnóstico.