Le Timer sous VB n’est pas précis !!!

tizana - 13 sept. 2012 à 18:27
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 14 sept. 2012 à 09:31
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()}
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.
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

5 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 sept. 2012 à 18:34
Bonjour,
Change ton fusil d'épaule ===>>
Donne une fréquence plus élevée (intervalle très court) à ton timer.
Dans son code : déclenche lorsque l'heure/date système est celle prévue pour le déclenchement. Redéfinis dans la foulée la prochaine date/heure de déclenchement.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
13 sept. 2012 à 19:37
même réponse sur l'autre forum ;)


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
14 sept. 2012 à 00:29
Salut

En effet, les Timers n'ont pas une réputation de précision.
Sous VB6, le l'objet Timer ne redémarre qu'à la fin du traitement du code inclus dans l'objet, donc perte de quelques pouillièmes de secondes à chaque cycle.

Une autre solution : Puisque tu dois surveiller les heures fixes, laisse ton Timer à 1 seconde (ou moins) et surveille le changement d'heure. Pour cela, tu sauvegardes l'heure courante dans une variable qui conservera son contenu entre deux cycles du Timer.
Dans le Timer, si l'heure actuelle est différente de celle mémorisée, twingo, on a changé d'heure --> lance ton programme.
Avant de sortir, il faudra penser à mémoriser la nouvelle heure.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 sept. 2012 à 07:30
Bonjour, jack,
petite faute de frappe ===>>
est différente de
===>>
est supérieure ou égale à
(c'est d'ailleurs ce que je lui disais plus haut).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
14 sept. 2012 à 09:31
c'est d'ailleurs ce que je lui disais plus haut.
sur l'autre forum aussi

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Rejoignez-nous