toxjamescook
Messages postés45Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention 6 février 2007
-
11 mai 2005 à 19:00
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)