Accueil





Fonction de désallocation des ressources d'un script



Cette procédure de désallocation des ressources est prévue pour des scripts utilisant un namespace, ce qui est la seule façon "propre" de faire un script.

Votre script ainsi pourvu sera totalement déchargé avant chaque rehash / restart, ou à chaque fois que vous le rechargerez au moyen de la commande .tcl source scripts/nom_de_votre_script.tcl

Cela vous permettra de modifier des choses dans le code de votre script, et de le recharger aussi proprement que si vous aviez redémarré votre Eggdrop.

Cela vous permettra également de décharger simplement votre script en tapant .tcl ::YOURNAMESPACE::unload, par exemple en vue d'une désinstallation sans avoir à redémarrer votre Eggdrop.

Si votre script n'utilise pas de timers ou d'utimers, vous pouvez enlever les lignes correspondantes dans la procédure unload afin de ne pas encombrer inutilement votre code.
Si votre script ne déclare pas de package au moyen de package provide YOURSCRIPTNAME, vous pouvez enlever la ligne package forget YOURSCRIPTNAME.
Si votre script n'utilise pas de catalogue de messages (msgcat), vous pouvez enlever la ligne ::msgcat::mcforgetpackage


A placer avant toute autre ligne de code dans votre script
if {[::tcl::info::commands ::YOURNAMESPACE::unload] eq "::YOURNAMESPACE::unload"} { ::YOURNAMESPACE::unload }


Procédure à placer de préférence avant toute autre procédure dans votre script
############################################################################### # Désallocation des ressources : le script se décharge totalement avant chaque # rehash ou à chaque relecture au moyen de la commande "source" ou autre. ############################################################################### proc ::YOURNAMESPACE::unload {args} { putlog "Désallocation des ressources de YOURSCRIPTNAME..." # Suppression des binds. foreach binding [lsearch -inline -all -regexp [binds *[set ns [::tcl::string::range [namespace current] 2 end]]*] " \{?(::)?$ns"] { unbind [lindex $binding 0] [lindex $binding 1] [lindex $binding 2] [lindex $binding 4] } # Arrêt des timers en cours. foreach running_timer [timers] { if { [::tcl::string::match "*[namespace current]::*" [lindex $running_timer 1]] } { killtimer [lindex $running_timer 2] } } # Arrêt des utimers en cours. foreach running_utimer [utimers] { if { [::tcl::string::match "*[namespace current]::*" [lindex $running_utimer 1]] } { killutimer [lindex $running_utimer 2] } } # On décharge le catalogue de messages. ::msgcat::mcforgetpackage namespace delete ::YOURNAMESPACE # Suppression de la déclaration de package. package forget YOURSCRIPTNAME }


Bind
bind evnt - prerehash ::YOURNAMESPACE::unload

©2005-2020 Menz Agitat