Bizarrerie du Timer et de son interval

bigcoincoin Messages postés 3 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 25 juin 2005 - 4 mai 2005 à 04:10
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 4 mai 2005 à 16:33
J'ai découvert un truc bizarre avec un Timer dans un programme que j'essaye de faire en vb6.
Pour mieux comprendre mon problème placez le code suivant dans une nouvelle feuille et ajouter 1 controle Label et 2 controles Timer : Timer1 (interval 1000) et Timer2 (interval 30).

le Timer1 fait un décompte de 60 secondes, pendant ce temps le Timer2 compte le nombre de fois qu'il est éxecuté pendant ces 60secondes.
enfin lorsque les 60sec sont écoulées une fenetre m'affiche le nombre d'appel du Timer2...
voici mes résultats:
en 60sec le Timer2 a été appelé 1892 fois, comme sont interval est de 30millisecondes cela correspond à "1892x 30 =56760ms" au lieu de 60000ms (il manque presque 4secondes!!!)
pourquoi???
encore plus bizarre : lorsque je change l'interval du Timer2, je mets 31 par exemple, le programme me dit "1920x31= 59520ms" et là on se rapproche des 60000ms
pourquoi???
encore beaucoup plus bizarre : je mets l'interval à 100ms et là il me dit que le Timer2 à été appelé 547fois soit 547* 100 =54700ms et là on s'éloigne encore des 60000ms!!!

là je comprend pas, j'ai fais plein de tests et j'obtiens toujours les memes valeurs.
si quelqu'un pouvait m'aider ce serait vraiment cool parce que là je bloque!

Merci à tous!!!

BigCoincoin

le code:

Dim i As Integer
Dim Temps As Integer


Private Sub Timer1_Timer()
Temps = Temps + 1 'ajout d'une seconde à l'horloge


Label1.Caption = Str(60 - Temps) & "secondes" 'affichage du décompte


If Temps = 60 Then
Timer2.Enabled = False
MsgBox "Temps écoulé: 60sec" & vbCrLf & _
" nombre de cycles du Timer2:" & Str(i) & vbCrLf & _
" équivaut à:" & Str(i) & "*" & Str(Timer2.Interval) & "ms" & _
"=" & Str(i * Timer2.Interval) & " millisecondes" & vbCrLf & _
"Que sont devenues les quelques secondes manquantes?", vbQuestion, "Bizarre"
End
End If


End Sub



Private Sub Timer2_Timer()
i = i + 1 'augmentation du compteur
End Sub

4 réponses

BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
4 mai 2005 à 07:10
t'enerve pas, ne jete pas VB ou ton pc par la fenetre, c'est "normal"

le timer n'est malheureusement pas precis.Rien de plus, rien de moins.



++

BasicInstinct
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
4 mai 2005 à 08:30
Si tu veux faire des décomptes plus précis, utilise l'API
GetTickCount(), parce que le Timer déraille systématiquement. Ce
contrôle est bien pour faire plusieurs opérations à la seconde, mais
sur une minute, il dérape ...




Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
bigcoincoin Messages postés 3 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 25 juin 2005
4 mai 2005 à 11:48
ok merci les gars, et moi qui pensait avoir trouvé un mega Bug du Timer qui m'aurait rendu célébre!!! j'ai raté mon coup, me reste plus que la Star Ac'

ciao
BigCoincoinFriz
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
4 mai 2005 à 16:33
C'est effectivement un mega Bug du controle Timer de VB. Mais le célèbre dans l'histoire c'est lui et pas toi

Petite
subtilité de fonctionnement que j'avais découvert en son temps après
expertise suite à des soucis comme le tiens : si tu programme une
période de 100ms pour ton timer et que ta routine timer s'exécute en
50ms, ton timer ne se déclenchera pas toutes les 100ms mais toutes les
150ms +- un temps variable. Toutefois, au bout d'une certaine dérive,
il se recale régulièrement sur un top à 100ms puis redérive à nouveau.

C'est pour ça qu'en 60000ms tu n'auras que 5xxxx appels de ta routine
timer, les xxxx variants en fonctions de la machine, de l'humité de
l'air, de la bonne humeur du jour de la secrétaire,.......



<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0
Rejoignez-nous