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.