Communauté sur les Eggdrops - Community about Eggdrops
vwait, c'est pratique. - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: vwait, c'est pratique. (/showthread.php?tid=724)



vwait, c'est pratique. - Artix - 21/07/2010

Jusqu'a présent, l'utilisation de vwait était impossible sur les eggdrop (sauf avec le patch vwait pour la version 1.6.19).
Mais vous avez peut-être remarqué dans le changelog de la version 1.6.20 RC2 que toute l'eventloop TCL à été refaite pour permettre une meilleure utilisation de fileevent et de vwait.

vwait permet de faire "attendre" l'interprétation en cours, sans bloquer la détection d'évenements (donc, une autre interprétation peut se lancer pendant ce temps).
Sa syntaxe est: vwait <varname>
vwait va faire attendre TCL jusqu'a ce qu'un set soit effectué sur la variable en question.

On peut en faire de nombreuses utilisations.
Parmi elles on peut noter par exemple:

- Remplacer un timer, en utilisant after
Ca reste beaucoup plus lourd qu'utiliser directement un timer ou after, mais permet de garder tout le contexte de l'execution en cours.
Démonstration:

Code:
[10:00:00] <Artix> .tcl after 10000 {set trigger 1}; vwait trigger; putlog "boo!"; return test
[10:00:05] <Artix> Pendant ce temps, les events continuent de fonctionner
[10:00:10] boo!
[10:00:10] Tcl result: test
- Effectuer une opération simultanée de manière "asynchrone".
L'exemple est très simple: dans certains scripts, vous pouvez avoir besoin de faire un WHOIS sur quelqu'un par exemple.
Gérer ce genre de trucs avec des timers et des procédures qui s'appellent entre elles, c'est vraiment chiant. Avec vwait on peut se débarrasser de tout ça.
On demande à la procédure principale d'envoyer le whois, puis d'attendre une variable avec vwait.
Pendant ce temps - une autre procédure récupère le résultat du WHOIS (par un bind raw, toussa), et le met dans la variable.
Du coup, la procédure principale se relance et à déjà les résultats dans la variable!



Une dernière chose: si vous prévoyez d'integrer vwait, faites bien en sorte que votre script ne fonctionne pas avec les versions précédant la 1.6.20.
Utiliser vwait avec les autres fera bien attendre l'eggdrop, mais bloquera toutes les autres éxecutions, les binds, etc...