Un thread par déclenchement. Chaque script déclenché s'exécute sur un thread qui lui est
propre, avec ses propres variables et caches d'énumération. Deux gestes déclenchés coup sur coup
s'exécutent en même temps. Un verrou nommé les empêche d'entremêler un
travail partagé. Un moniteur série fait exception : ses lignes sont traitées une à la fois, dans
leur ordre d'arrivée.
Un script peut bloquer.UtilityWait, les boîtes de message, un ShellRunProgram qui attend
la fin du programme et les lectures série bloquent le thread de leur propre script et rien
d'autre. Les entrées de la souris et du clavier continuent de circuler.
Arrêt. Le raccourci clavier Arrêter toutes les actions et EngineStopAllActions() terminent
chaque script en cours à sa prochaine instruction : une boucle sans fin peut donc toujours être
arrêtée. UtilityWait, le verrou et les attentes série, un ShellRunProgram qui attend la fin
du programme, ShellShowToast, MultimediaPlayMp3File et UIShowConsole remarquent aussi une
demande d'arrêt pendant qu'ils attendent. Les quatre derniers renvoient alors false, et
ShellRunProgram laisse le programme s'exécuter. Les autres fonctions intégrées terminent d'abord
leur appel en cours.
Ce qui persiste entre deux exécutions :
Storage* : des valeurs nommées de n'importe quel type, partagées par tous les scripts et
conservées en mémoire tant que le moteur tourne. StorageGetValue d'un nom jamais défini
renvoie l'Integer 0. Il contient jusqu'à 1 024 valeurs, avec des noms d'au plus
256 caractères et des Text d'au plus 32 768 caractères ; dépasser une limite arrête l'action
avec une erreur.
Les propriétés de fenêtre (WindowSetPropertyInteger/…Text) : des valeurs attachées à une
fenêtre, qui disparaissent à sa fermeture ou à la fermeture d'Input.Observer. Une valeur texte
compte au plus 1 024 caractères, et jusqu'à 512 valeurs texte peuvent être stockées à la fois.
Les minuteurs nommés, surveillances de dossier et moniteurs série, que le moteur maintient en
marche après la fin du script qui les a créés.
Scripts passés sous forme de Text.TimerCreate, FolderWatchCreate et SerialMonitorCreate
prennent un script en argument Text. Il est compilé et lancé séparément à chaque déclenchement :
il a donc des variables neuves et ne voit pas celles du script qui l'a créé. Les guillemets qu'il
contient doivent être échappés en \", ou bien placez le script dans un extrait et passez
SnippetGetScript("name").
Contexte. Les fonctions intégrées Context* décrivent ce qui a déclenché l'exécution en cours :
le geste, ses points et son rectangle englobant, la fenêtre et le contrôle situés dessous, le
bouton, l'événement de surveillance ou la ligne série. Le script d'un minuteur n'a aucun contexte
de déclenchement. Le script d'une surveillance de dossier reçoit les valeurs ContextGetWatch*, et
celui d'un moniteur série les valeurs ContextGetSerial*.
Les extraits sont des scripts nommés de la configuration. SnippetExecuteScript en exécute un
jusqu'au bout avant que l'appelant ne continue, et ne renvoie true que si l'extrait s'est
exécuté jusqu'à la fin. L'extrait partage le contexte de déclenchement de
l'appelant, mais a ses propres variables.
Le mode sans échec bloque tous les scripts, sauf ceux exécutés depuis la console de diagnostic.