Page 1 sur 1
[R] Timer.tick ??!
Posté : sam. 16 oct. 2010 19:50
par cutprod
Bonsoir a tous, encore félicitation pour le forum j'y trouve souvent mon "bonheur"!
Petite question : sous vb net j'utilise des timers qui me déclencher des évènements au "timer.tick"
Sous Autoit j'utilise "AdlibRegister", il n' y a pas autre chose? pas de timer.tick?
Re: [..] Timer.tick ??!
Posté : sam. 16 oct. 2010 20:30
par jbnh
En quoi AdlibRegister ne convient-il pas ?
Re: [..] Timer.tick ??!
Posté : sam. 16 oct. 2010 20:43
par cutprod
Si si ça convient très bien!
C'était juste pour savoir...
Re: [R] Timer.tick ??!
Posté : sam. 16 oct. 2010 22:17
par jbnh
Je crois bien que l'équivalent est bien AdlibRegister et AdlibUnRegister.
Re: [R] Timer.tick ??!
Posté : sam. 16 oct. 2010 22:25
par cutprod
ok, je te remercie.
Pourquoi lorsque sur un événement je lance 2 "AdlibRegister" avec la même valeure "time" sa flambe mon programme (je peut plus sortir!) ?
Re: [..] Timer.tick ??!
Posté : sam. 16 oct. 2010 22:37
par cutprod
Regarde sur un script de ce genre ca bloque quand j'active mes deux fonctions : Pourquoi?
(Je suis sur que c'est tout bête mais je débute...)
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 364, 221, 192, 124)
$Button1 = GUICtrlCreateButton("fonction1", 43, 53, 121, 33, $WS_GROUP)
$Button2 = GUICtrlCreateButton("fonction2", 197, 54, 121, 33, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("", 43, 141, 116, 25)
GUICtrlSetBkColor(-1, 0xC0C0C0)
$Label2 = GUICtrlCreateLabel("", 203, 143, 116, 25)
GUICtrlSetBkColor(-1, 0xC0C0C0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
AdlibRegister("one",1000)
Case $Button2
AdlibRegister("two",1000)
EndSwitch
WEnd
Func one()
GUICtrlSetBkColor($Label1, 0xff0000)
Sleep (500)
GUICtrlSetBkColor($Label1, 0xC0C0C0)
EndFunc
Func two ()
GUICtrlSetBkColor($Label2, 0xff0000)
Sleep (500)
GUICtrlSetBkColor($Label2, 0xC0C0C0)
EndFunc
Re: [..] Timer.tick ??!
Posté : sam. 16 oct. 2010 22:55
par Tlem
En regardant votre code, je dirais simplement que si vous cliquez sur le bouton 1, vous activez une première fonction qui est exécutée une fois par seconde. Or cette fonction dure un tout petit peut plus que 500ms ce qui ne laisse pas beaucoup de temps à votre boucle de message (moins de 500 ms)

.
Si vous cliquez sur le bouton 2, vous activez une nouvelle fonction qui dure un peut plus de 500 ms et qui doit être exécutée toute les secondes.
Donc 500 ms + 500 ms = 1 seconde
Autrement dit, vos fonctions utilisent 100% des ressources du script, ce qui le rend 'sourd' aux autres commandes puisque la boucle de message ne peut être exécutée normalement.

Re: [..] Timer.tick ??!
Posté : sam. 16 oct. 2010 23:04
par cutprod
OK je vois, y a t il une solution ?(Pour ce genre d'actions)
Re: [..] Timer.tick ??!
Posté : sam. 16 oct. 2010 23:56
par Tlem
Oui, il y a deux solutions.
1 - Diminuer le temps de chaque fonctions en modifiant le
Sleep(500) par un
Sleep(100) par exemple.
2 - Augmenter la périodicité d'appel aux fonctions. Au lieu de 1 seconde, utilisez 5 secondes ou plus.
Il est aussi possible de faire un mix des deux solutions.

Re: [..] Timer.tick ??!
Posté : dim. 17 oct. 2010 00:04
par cutprod
Merci pour ton aide.
Ça m'étonne un peut! On ne peut pas faire un script ou figure deux pauvres boutons qui clignotent 1 fois par seconde ,sans faire planter le prog!!
Rassure moi?
Re: [..] Timer.tick ??!
Posté : dim. 17 oct. 2010 00:43
par Tlem
Le programme ne plante pas !!!
Il fait ce que vous lui demandez de faire, sauf que là vous lui demandez d'être à plus de 100%.
Le problème vient de la commande
Sleep(). Elle est à proscrire dans les fonctions comme
AdlibRegister().
Lisez ceci :
http://www.autoitscript.fr/forum/viewto ... 560#p36560
Voici une alternative :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Global $One = False, $Two = False
$Form1 = GUICreate("Form1", 364, 221, 192, 124)
$Button1 = GUICtrlCreateButton("fonction1", 43, 53, 121, 33, $WS_GROUP)
$Button2 = GUICtrlCreateButton("fonction2", 197, 54, 121, 33, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("", 43, 141, 116, 25)
GUICtrlSetBkColor(-1, 0xC0C0C0)
$Label2 = GUICtrlCreateLabel("", 203, 143, 116, 25)
GUICtrlSetBkColor(-1, 0xC0C0C0)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
AdlibRegister("one",500)
Case $Button2
AdlibRegister("two",500)
EndSwitch
WEnd
Func one()
If $One = True Then
GUICtrlSetBkColor($Label1, 0xff0000)
$One = False
Else
GUICtrlSetBkColor($Label1, 0xC0C0C0)
$One = True
EndIf
EndFunc
Func two ()
If $Two = True Then
GUICtrlSetBkColor($Label2, 0xff0000)
$Two = False
Else
GUICtrlSetBkColor($Label2, 0xC0C0C0)
$Two = True
EndIf
EndFunc
Re: [..] Timer.tick ??!
Posté : dim. 17 oct. 2010 01:18
par cutprod
Ton alternative fonctionne très bien.
Je te remercie.
Re: [..] Timer.tick ??!
Posté : dim. 17 oct. 2010 01:50
par Tlem
N'oubliez pas la balise [R] dans le titre de votre premier message si votre sujet est résolu.
Re: [R] Timer.tick ??!
Posté : mer. 24 nov. 2010 15:39
par zeshrek
A la recherche d'une fonctionnalité similaire (pour mon controle parental, ou je veux surveiller que les process voulus tournent, et que que les indésirables eux ne tournent pas) je suis tombé sur ce topic
Je ne connaissais pas adlibregister, et c'est exactement ce qu'il me fallait, du coup je me suis servi de ton script pour voir comment ca marche... et j'ai eu l'idée d'une autre solution a ton pb.
Comme l'a dit Tlem, le pb vient des sleep. D'ou ma question, pourquoi les garder si ils sont source de probleme ?
Donc voici ce sur quoi je t'aurai orienté.
(j'ai rajouté un 3eme bouton qui lance les 2 compteurs simultanément pour etre sur que ca ne pose pas de pb et qu'ils restent bien synchrones)
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 364, 221, 192, 124)
$Button1 = GUICtrlCreateButton("fonction1", 20, 54, 90, 33, $WS_GROUP)
$Button2 = GUICtrlCreateButton("fonction2", 240, 54, 90, 33, $WS_GROUP)
$Button3 = GUICtrlCreateButton("fonction3", 130, 94, 90, 33, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("", 43, 141, 116, 25)
GUICtrlSetBkColor(-1, 0xC0C0C0)
$Label2 = GUICtrlCreateLabel("", 203, 143, 116, 25)
GUICtrlSetBkColor(-1, 0xC0C0C0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$color1 = 0xff0000
$color2 = 0xC0C0C0
$color3 = 0x00ff00
$color4 = 0xC0C0C0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
AdlibRegister("one", 500)
Case $Button2
AdlibRegister("two", 500)
Case $Button3
AdlibRegister("one", 500)
AdlibRegister("two", 500)
EndSwitch
WEnd
Func one()
_swap($color1,$color2)
GUICtrlSetBkColor($Label1, $color1)
EndFunc
Func two()
_swap($color3,$color4)
GUICtrlSetBkColor($Label2, $color3)
EndFunc
Func _swap(ByRef $v1, ByRef $v2)
$v3 = $v2
$v2 = $v1
$v1 = $v3
Return
EndFunc
Re: [R] Timer.tick ??!
Posté : mer. 24 nov. 2010 16:50
par cutprod
ha oui ok, c'est très bon aussi!!
Mais put tu m'expliquer pourquoi tu donne la même valeur a deux variables, pourquoi ne pas en utiliser qu'une seule ?
$color2 = 0xC0C0C0
$color4 = 0xC0C0C0
Re: [R] Timer.tick ??!
Posté : mer. 24 nov. 2010 17:11
par zeshrek
cette question je l'attendais...
Comme les valeurs swapent par paquet de 2 ($color1 avec $color2 et $color3 avec $color4) si on en utilisait que 2 quand la premiere fonction fait son swap ca marcherait, puis la 2eme viendrait remettre tout d'aplomb, ce qui fait que quand la premiere reviendrait, elle remetrait a nouveau comme elle avait mis apres son premier passage, du coup ca clignoterait plus.
Pire si on en met que 3 (col1=fond, col2 et col3 etant des couleurs distinctes pour les 2 cases).
Donc fonction1 swap col1 et col2
et fonction 2 swap col1 et col3
Si les 2 fonctions sont activées on se retrouve avec un chenillard ou les 3 couleurs se succedent sur chaque case.
De plus comme ca rien ne t'empeche de mettre
$color1 = 0x00ff00
$color2 = 0x000000
$color3 = 0x0c0c0c
$color4 = 0xffffff
pour faire clignoter la premiere en noir et vert, et la seconde en gris et blanc (si je me trompe pas dans mes codes couleur...)
Re: [R] Timer.tick ??!
Posté : mer. 24 nov. 2010 17:13
par cutprod
OK merci pour tes "lumières", on progresse chaque jours...