Problème de précision avec un Timer
Bonjour à tous,
Dans une application, j'ai besoin qu'un évènement se déclenche à une fréquence bien précise, et c'est pourquoi j'utilise la classe Timer.
Or je rencontre un souci de précision : lorsque par exemple ma fréquence est de 1000/minutes, l'évènement ne se produit en réalité que 958 fois par minutes...
Est-ce la précision du timer qui n'est pas suffisante? Ou bien cela vient-il de mes calculs pour calculer la période à partir d'une fréquence donnée?
Voila comment je procède :
Code:
1 2 3 4 5 6 7 8 9 10
|
public float f;
public float periode;
public float msDuration;
f = (int) numericUpDown1.Value;
f = f / 60F; //la fréquence est en évènements/minute, je la passe en évènements/seconde
periode = 1 / f;
msDuration = periode * 1000F; //passage de la période en millisecondes
timer1.Interval = (int) msDuration; |
Il y a en effet perte de précision quand j'attribue sa valeur a timer1.Interval du fait de la reconversion en int, mais comment faire autrement ???
Je vient de faire un essai avec 6000 évènements/minutes : le nombre d'évènements réalisés en réalité sont de 3800 ! Alors que normalement, 6000/60 donne 100, 1/100 donne 0,01 et 0,01 * 1000 donne 10, ce qui en théorie n'entraîne pas de perte au niveau de la reconversion en int...
Avec 600, soit un évènement tous les 100 millisecondes on obtient 548 éxécutions...
Au passage, je précise que mon évènement n'est pas extrèmement important, ce n'est pour l'instant qu'un changement de valeur d'un label...
Merci d'avance à tous ceux qui me répondront...