Prob de timer

Résolu
toxjamescook Messages postés 45 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 6 février 2007 - 11 mai 2005 à 19:00
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 11 mai 2005 à 20:52
bonjour

voila j'ai créer un timer d'intervalle 1000 dans ce timer je recupere la date et des données synchroniser a la seconde du PC dans un tableau

Puis j'ai un bouton qui me recopie sur un txt les données

quand je laisse tourner l'appli et que je regarde mon point txt je constate que toutes les 11m36S j'ai un trou dans mes données c'est a dire que l'acquisition n'a pas été effectuer dans le tableau

Est ce que qq pourrais m'éclairer sur ce prob
toutes les possibilitées Merci d'avance

2 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 mai 2005 à 20:52
C'est toujours le même bug du controle Timer de VB mainte fois débatu sur ce site.



Pour résumer, la routine de ton timer ne s'execute pas toutes les 1000
ms mais toutes les (1000+durée_de_la_routine) ms tout en se recalant
régulièrement sur le bon cycle.



ex : si ta routine met 10ms à s'executer totalement, elle sera executer
toutes les 1010ms même si tu configure 1000 pour l'intervale. Résultat,
sur 100 cycles tu perd un cycle, ta routine ne s'est executée que 99
fois.



pour 11m36 j'en deduis que ta routine met approximativement 1,5 ms à s'executer (calcul rapide, résultat non garanti ).



Solution : passer par les timers systèmes de windows via les api et oublier le controle de VB si le temps est vraiment critique




<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.
3
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
11 mai 2005 à 19:27
Salut
Si ta machine a une charge accidentelle (comme par exemple la recherche de nouveau courrier), le timer peut en effet louper un tour (ou +). C'est "normal".
Pour avoir plus de précision, mets ton timer à 10 mSec et utilise le 'chrono' système pour déclencher : GetTickCount (api) te renverra le nombre de millisecondes écoulées depuis que ton PC est démarré.
Dans ta Sub Timer1_Timer :
Static Memo As Long
Dim Ticks As Long
Ticks = GetTickCount
If Ticks - Memo > 1000 Then
Call MonAction
End If
Memo = Ticks

Ce n'est qu'une idée.
Tu trouveras la déclaration/utilisation de GetTickCount partout sur ce site : forum comme sources

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
Rejoignez-nous