Aller au contenu principal

Exécution des scripts

  • 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.