calimero63110
Messages postés33Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention14 décembre 2008
-
7 sept. 2008 à 09:26
jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 janvier 2009
-
8 sept. 2008 à 13:49
Bonjour,
Je cherche a realiser un timer précis, ( maximum 5ms d'erreur ), il est réglé sur 30-40 ms, or il tick toutes les 70ms ! ( le code présent a l'interieur n'est pas tres volumineux ni long a executer.
Je cherche donc par nimporte quel moyen a rendre ce timer précis.
J'ai essayé via un timer avec l'api windows :
SetTimer Me.hwnd, 0, 40, AddressOf TimerProc
On obtiens EXACTEMENT le même resultat qu'avec le timer windows. Comment faire ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 7 sept. 2008 à 09:37
Bonjour,
essaye alors de le faire "ticker" toutes les millisecondes (intervalle de 1 ms) et utilise, dans ses unstrructions, une variable static utilisant la fonction Timer, de sorte à ne lancer une exécution que si la nouvelle valeur de la fonction timer est >= 5 par rapport à ta variable static.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 7 sept. 2008 à 11:22
Re,
Non ...
Le principe est le suivant (ici avec un contrôle timer ... que tu peix remplacer par ton Timer/api et la fonction Timer (que tu peux remplacer par ton GetTickCount, si tu veux).
Une Form, un timer, un bouton Lancer et un bouton Stopper
Essaye :
Private debut As Double, fois As Double
Private Sub lancer_Click()
debut = Timer
Timer1.Interval = 1
Timer1.Enabled = True
End Sub
Private Sub stopper_Click()
Dim duree As Double, frequence As Double
duree = Timer - debut
frequence = duree / fois
MsgBox "j'ai battu " & fois & " fois pendant " & duree & " secondes " & _
"soit toutes les " & Format(frequence, "#0.000") & " secondes"
fois = 0
End Sub
Private Sub Timer1_Timer()
Static toto As Double If toto 0 Then toto Timer
If Timer >= toto + 0.005 Then
fois = fois + 1
End If
End Sub
Tu n'arriveras jamais à ta fréquence de 0.005 secondes, toutefois, quel que soit le procédé ... sauf si ton matériel est super exceptionnel.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 7 sept. 2008 à 15:22
salut,
précision (intervalle mini) du contrôle timer : 18ms.
précision par API : 10ms
possible de passer en dessous avec les api MIDI mais c'est un gouffre de ressources et le succès dépend du processeur.
bref il doit y avoir quelque chose que tu ne nous dis pas, un contrôle timer réglé à 40ms sera fonctionnel
le code dans l'évènement est peut être un peu plus long que "
pas tres volumineux ni long a executer
"
++
<hr size="2" width="100%" />
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 janvier 2009 7 sept. 2008 à 16:42
On atteint quand même sans soucis une résolution fiable d'une dizaine de microsecondes avec QueryPerformanceCounter, qui n'est pas un "gouffre de ressources" :-) (avec une machine à au moins 1 Ghz).
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 7 sept. 2008 à 16:58
oui pour comparer 2 valeurs (chrono), mais pas pour faire un timer
si c'est pour faire
tant que différence <= X
doevents
le temps sera plus que variable, selon la machine elle-même mais également l'activité au moment T.
et de toute manière le proc (principal) poussera à 100%
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
calimero63110
Messages postés33Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention14 décembre 2008 7 sept. 2008 à 18:21
.:.Hello, Pour des timer précis et tout ce qui concerne la gestion du
temps, on .:.pourra se référer au site de la FAQ Visual Basic et notamment
à l'article : .:."Comment chronométrer mon programme ? Comment mesurer
précisément le .:.temps ?" : http://faq.vb.free.fr/index.php?question=176 L'article présente .:.plusieurs méthodes, en fonction de la précision
souhaitée. Cordialement :.:Jean-Marc
Comment faire pour executer un code a intervale réguliere, comme avec les timers windows ^^ parceque là, c'est des codes pour calculer le temps entre deux intervales.
J'avais avant :
Do while true
tick = gettickcount
do while gettickcount < tick + 30
doevents
loop
Loop
J'ai mis un timer pour alleger le cpu, je ne souhaite en aucun cas remettre une boucle !
jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 janvier 2009 8 sept. 2008 à 13:49
PCPT: tu as raison bien sur. Les méthodes données permettent de mesure le temps, pas de déclencher des évènements, du moins pas avec cette précision. Si on descend en dessous de la milliseconde, la charge de la machine influera sur la précision bien au dela de l'ordre de grandeur de la résolution du timer. A moins d'utiliser d'autres techniques telles que celles que tu évoquais dans un post précédent. Et dans tous les cas, le CPU ne va pas chômer...