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 :
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 ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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...
Partager