Amusons nous un tout petit peu avec du threading ... !!
=> C'est quoi un thread ?
Un thread, c'est l'ami du développeur, dans bien des cas !
On peut décrire un thread ainsi : c'est l'exécution de code parallèle à l'exécution du code principal de l'application. En gros ça veut dire : un programme exécute du code de façon séquentielle, il parcours ce que l'on a écrit dans l'ordre, pas de mystère, on sait que si on fait un appel à la fonction a() avant la fonction b(), alors la fonction a() sera exécutée avant la fonction b(). Dans le cas d'un thread, on permet qu'une autre séquence de code soit exécutée parallèlement au reste du code de l'application (qui lui continue comme si de rien n'était).
Et qui plus est, le code threadé partage le même espace mémoire que la boucle d'exécution principale (c'est plutôt sympa, ça permet de mettre à jour des variables, des handles, de lire et écrire dans des fichiers et mettre tout ça dans des buffers ... tout pour s'amuser quoi !)
voila pour la partie théorie foireuse .... ('tain c'est vachement plus compliqué à expliquer que ce que je pensais au début ... en fait c'est plus intuitif à manipuler qu'à expliquer, donc n'ayez pas peur si vous n'avez rien compris à ce que j'ai dis au dessus !)
=> Comment on crée un thread ?
En AutoIt (parce que c'est un peu le sujet quand même), créer un thread revient à déclarer que l'on souhaite exécuter une fonction choisie à un intervalle de temps régulier !
Ceci se fait par l'appel à la fonction AdLibRegister('NomFonction', fréquence en millisec).
=> Mais si je veux un thread qui exécute du code qu'une fois ?
Bah dans le code de la fonction threadée, je mets à la fin le code nécessaire à la destruction du thread : AdLibUnregister('NomFonction')
=> Exemple !
Voila, on reprend la partie pratique, c'est plus sympa :
* on prend le handle d'une fenêtre au hasard : la barre des tâches (compatibilité Win XP prouvée, sur vista et seven il faudra ptêtre changer le WinGetHandle)
* on enregistre la fonction qui sera exécutée dans le thread
* on fait ce qu'il faut pour pouvoir arrêter proprement le programme ...
* on lance une boucle infinie (parce que si le programme s'arrête, le thread n'existera pas
* en dessous j'ai déclarer deux fonctions, une qui sera exécutée toutes les 2 secondes par le thread, l'autre qui sert à quitter ...
* vous remarquerez que mon thread joue à intervalles réguliers avec la transparence de la barre des tâches, amusez vous à l'adapter !
Code : Tout sélectionner
;***************************************************************************************
;** VARIABLE GLOBALE
;***************************************************************************************
Global $handleBarreDesTaches = WinGetHandle("[CLASS:Shell_TrayWnd]", "")
;***************************************************************************************
;** CODE PRINCIPAL
;***************************************************************************************
AdlibRegister("Play", 2500)
HotKeySet("!t", "Restore")
While 1
sleep(10000)
WEnd
;***************************************************************************************
;** FONCTIONS
;***************************************************************************************
Func Play()
For $i = 254 To 2 Step -1
WinSetTrans($handleBarreDesTaches, "", $i)
Next
sleep(150)
For $i = 1 To 255 Step 1
WinSetTrans($handleBarreDesTaches, "", $i)
Next
EndFunc
Func Restore()
AdlibUnRegister("Play")
WinSetTrans($handleBarreDesTaches, "", 255)
Exit
EndFunc