After

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

after - Execute une commande après un certain délai

Syntaxe

after ms
after ms ?script script script ...?
after cancel id
after cancel script script script ...
after idle ?script script script ...?
after info ?id?

Description

Cette commande est utilisée pour retarder l'exécution d'un programme ou exécuter une commande en arrière-plan après un certain délai . Elle a plusieurs formes, dépendantes du premier argument de la commande:

  • after ms : Ms doit être un entier donnant une durée en millisecondes. La commande dort pendant ms millisecondes et ensuite retourne. Tant que la commande dort l'application ne répond pas aux évènements.
  • after ms ?script script script ...? : Sous cette forme la commande retourne immédiatement, mais elle prépare une commande Tcl à être exécutée ms millisecondes plus tard comme un gestionnaire d'évènement. La commande sera exécutée exactement une fois, à l'instant donné. La commande retardée est formée par concaténation de tout les arguments de script de la même façon que par la commande concat. La commande sera exécutée au niveau global (en dehors du contexte de toute fonction Tcl). Si une erreur se produit pendant l'exécution de la commande retardée alors le mécanisme bgerror est utilisé pour rapporter l'erreur. La commande after renvoie un identificateur qui peut être utilisé pour annuler la commande retardée en utilisant after cancel.
  • after cancel id : Annule l'exécution d'une commande retardée qui a été précedemment programmée. Id indique quelle commande sera annulée; il doit avoir été la valeur de retour d'une précédente commande after. Si la commande désignée par id a déjà été exécutée alors la commande after cancel n'a pas d'effet.
  • after cancel script script ... : Cette commande annule aussi l'exécution d'une commande retardée. Les arguments script sont concaténés séparés par des espaces (comme dans la commande concat). S'il y a une commande en attente qui correspond à la chaîne, elle est annulée et ne sera jamais exécutée; si aucune commande n'est en attente alors la commande after cancel n'a pas d'effet.
  • after idle script ?script script ...? : Concatène les arguments script avec des séparateurs espace (comme dans la commandeconcat), et prépare le script résultant à être évalué plus tard comme un callback inactif . Le script sera lancé exactement une fois, à l'instant de rentrer dans la boucle d'évènement et qu'il n'y a pas d'évènements à traiter. La commande renvoie un identificateur qui peut être utilisé pour annuler la commande retardée en utilisant after cancel. Si une erreur se produit pendant l'exécution du script alors le mécanisme bgerror est utilisé pour rapporter l'erreur.
  • after info ?id? : Cette commande renvoie l'information au sujet des gestionnaires d'évènement existants. Si aucun argument id est fourni, la commande renvoie une liste d'identificateurs de tous les gestionnaires d'évènements existants créés par la commande after pour cet interpréteur. Si id est fourni, il spécifie un gestionnaire existant; id doit avoir été la valeur de retour d'un précedent appel de after et il ne doit pas avoir été déjà déclenché ou été annulé. Dans ce cas la commande renvoie une liste de deux éléments. Le premier élément de la liste est le script associé à id, et le second élément est soit idle soit timer pour indiquer de quelle sorte de gestionnaire d'évènement il s'agit.

Les formes after ms et after idle de la commande supposent que l'application est pilotée par évènement: les commandes retardées ne seront pas exécutées tant que l'application ne rentrera pas dans la boucle d'évènement. Dans les applications qui ne sont pas normalement pilotées par évènement, telles que tclsh, on peut activer la boucle d'évènement avec les commandes vwait et update.

Exemple

after 10000 [list putlog "ok"]

donne ok après 10 secondes.

Voir également

bgerror, contexte