YellowAnt
Messages postés8Date d'inscriptionlundi 3 février 2003StatutMembreDernière intervention 4 octobre 2011
-
4 oct. 2011 à 11:13
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
5 oct. 2011 à 13:43
Bonjour à tous.
Après quelques heures de recherche, aidé d'un collègue, nous coinçons sur un problème de TIMER.
Le timer VB semble fonctionner comme une pause et pas comme un timer indépendant.
Un expl. étant plus parlant, voici le code :
[i]Private Sub Form_Load()
Text1.Text = ""
Timer1.Interval = 2000
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Text1.Text = Text1.Text & vbCrLf & Timer()
For i = 0 To 9999999
Next i
End Sub/i
Le résultat est le suivant:
39142.48
39144.59
39146.71
39148.82
On remarque que le temps système est incrémenté des 2000ms de timer1.interval, mais que le temps de la boucle For-Next y est ajouté.
Je m'attendais à voir la sub Timer1 redémarrer 2000ms après son précédent lancement (quelque soit la durée des opérations exécutées dans la routine sub.
Mais en réalité la sub Timer1 redémarre seulement lorsque les opérations (ici, For-Next) sont terminées.
Je me rends bien compte de l'intérêt de ce fonctionnement dans le cas où Timer1.Interval est inférieur à la durée des opérations. Ce qui engendrerait soit un plantage, soit la création d'une nouvelle occurence de timer1?
Mais alors, comment faire ?
Quel est l'intérêt d'utiliser l'objet Timer, plutôt que la fonction "sleep", afin d'effectuer une simple pause avant ma boucle For-Next ?
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 oct. 2011 à 13:43
Timer1.Interval = Latence
Le 'Interval' des Timer s'exprime en mSec.
Mettre 1 revient à ne rien faire de plus qu'une boucle sans fin puisque VB descendra très difficilement en dessous des 50 mSec.