Bonjour,
Je suis en train de réaliser une application sous VB en utilisant un timer qui se déclenche à chaque début d’heure c.a.d « 10:00:00, 11:00:00, 12:00:00, 13:00:00 ….. 23:00:00 >> pour réaliser une tache précise.

Mais le problème avec ce timer c’est qu’il est parfois imprécis c a dire il se déclenche parfois après une ou deux seconde du début de l’heure (10:00 :01 ou 10 :00 :02) et parfois il se déclenche avant le début d’heure (09 :59 :59). Ce qui me cause un problème dans mon programme.

Voici comment je calcule le timer1.interval() .
Le timer1 est calculé dans le load() lors de l’ouverture de l’application et dans le timer1.tick() {recharge de la nouvelle valeur du timer.interval()}

Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
LOAD()
Dim date_next As Date
Dim date_now As Date = DateTime.Now
date_next = DateAdd(DateInterval.Hour, 1, date_now)
date_next = Mid(date_next.ToString, 1, Len(date1.ToString) - 6) + ":00:00"
Timer1.Interval = DateDiff(DateInterval.Second, date_now, date_next) * 1000

Par exemple si j’ouvre l’application vers 09 :35 :00 le 13/09/2012 le prochain déclenchement du timer devrait être vers 10:00 :00 le 13/09/2012.

Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
date_now = 13/09/2012 09:35:00
 
date_next = 13/09/2012 10:00:00 '(j’ajoute une heure au temps actuel et je mets les seconds et les minutes à zéro)
 
Timer1.Interval = 1500 * 1000 = 1500000


Le même calcule est utilisé lors du déclenchement du timer, je recalcule les nombre de milliseconde qui me sépare de la prochaine heure au lieu de mettre directement dans le timer interval = 3 600 000. Pour plus de précision
Je ne sais pas pourquoi j’obtiens ce genre de problème sachant que le timer est censé être un outil précis pour le calcul temporel.
Peut-être que ce timer utilisé est un timer software au contraire des timer utilisé dans les microcontrôleurs, qui eux sont des timer « HARDWARE» et indépendant, et fonctionnent en parallèle du processeur.

Y’a-t-il un autre moyen que je peux utiliser au lieu du timer ? et merci