Uma thread por disparo. Cada script disparado é executado em uma thread própria, com as suas
próprias variáveis e caches de enumeração. Dois gestos disparados em sequência rápida são executados
ao mesmo tempo. Um bloqueio nomeado impede que eles intercalem um trabalho
compartilhado. Um monitor serial é a exceção: as linhas dele são executadas uma de cada vez, na ordem
em que chegaram.
Um script pode ficar bloqueado.UtilityWait, caixas de mensagem, um ShellRunProgram que
aguarda o programa terminar e as leituras seriais bloqueiam a thread do próprio script, e nada mais.
A entrada do mouse e do teclado continua fluindo.
Interrupção. A tecla de atalho de parar todas as ações e EngineStopAllActions() encerram todo
script em execução na sua próxima instrução, então um loop infinito sempre pode ser interrompido.
UtilityWait, o bloqueio e as esperas seriais, um ShellRunProgram que aguarda o programa terminar,
ShellShowToast, MultimediaPlayMp3File e UIShowConsole também percebem um pedido de interrupção
enquanto aguardam. Os quatro últimos então retornam false, e ShellRunProgram deixa o programa em
execução. As demais funções internas terminam a chamada atual antes.
O que persiste entre execuções:
Storage*: valores nomeados de qualquer tipo, compartilhados por todos os scripts e mantidos na
memória enquanto o mecanismo estiver em execução. StorageGetValue de um nome que nunca foi
definido retorna Integer 0. Ele guarda até 1.024 valores, com nomes de até 256 caracteres e Text
de até 32.768 caracteres; ultrapassar um limite interrompe a ação com um erro.
Propriedades de janela (WindowSetPropertyInteger/…Text): valores associados a uma janela que
desaparecem quando ela é fechada ou quando o Input.Observer sai. Um valor de texto tem no máximo
1.024 caracteres, e até 512 valores de texto podem ser armazenados ao mesmo tempo.
Temporizadores nomeados, monitoramentos de pastas e monitores seriais, que o mecanismo mantém em
execução depois que o script que os criou termina.
Scripts passados como Text.TimerCreate, FolderWatchCreate e SerialMonitorCreate recebem um
script como argumento Text. Ele é compilado e disparado separadamente a cada vez que é acionado, então
tem variáveis novas e não enxerga as variáveis do script que o criou. As aspas dentro dele precisam do
escape \"; ou mantenha o script em um snippet e passe SnippetGetScript("name").
Contexto. As funções internas Context* descrevem o que disparou a execução atual: o gesto, os
seus pontos e o retângulo delimitador, a janela e o controle sob ele, o botão, o evento do
monitoramento ou a linha serial. O script de um temporizador não tem contexto de gatilho. O script de
um monitoramento de pasta recebe os valores de ContextGetWatch*, e o de um monitor serial recebe os
valores de ContextGetSerial*.
Snippets são scripts nomeados na configuração. SnippetExecuteScript executa um até o fim antes
que o chamador continue, e retorna true somente quando o snippet foi executado até o fim. Ele compartilha o contexto de gatilho do chamador, mas tem as suas próprias
variáveis.
O Modo de segurança bloqueia todos os scripts, exceto os executados pelo console de diagnóstico.