Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Timer précis [ Divers / Débutants ] (calimero63110)

dimanche 7 septembre 2008 à 09:26:44 | Timer précis

calimero63110

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 ?

dimanche 7 septembre 2008 à 09:37:11 | Re : Timer précis

jmfmarques

Membre Club
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.

dimanche 7 septembre 2008 à 09:49:47 | Re : Timer précis

calimero63110

C'est a dire :

A la fin du timer :
tick = gettickcount

au début

Do While gettickcount < tick + 40
DoEvents
Loop

c'est bien ça ?

Or je suppose qu'avec une machine peu puissante, l'équart va être encore plus important, voir ne pourra même pas ticker toutes les 40ms, non ?

dimanche 7 septembre 2008 à 11:22:41 | Re : Timer précis

jmfmarques

Membre Club

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.


dimanche 7 septembre 2008 à 11:35:01 | Re : Timer précis

jmfmarques

Membre Club
Euh... un oubli de réiunitialisation de toto ...
corrige :

Private Sub Timer1_Timer()
  Static toto As Double
  If toto = 0 Then toto = Timer
  If Timer >= toto + 0.5 Then
   fois = fois + 0.005
   toto = Timer
  End If
End Sub

dimanche 7 septembre 2008 à 12:19:46 | Re : Timer précis

calimero63110

Euh la sa tick toutes les 30ms ?

C'est precis ? a 5ms pret c'est toutes les 30ms ?

dimanche 7 septembre 2008 à 13:30:09 | Re : Timer précis

akim77

Bonjour,

"Or je suppose qu'avec une machine peu puissante, l'équart va être encore plus important, voir ne pourra même pas ticker toutes les 40ms, non ?
"

Oui, Windows n'est pas un système temps réel donc aucune garantie sur le temps d'éxécution.

As-tu tenté de changer la priorité de ton processus ?
Dans le gestionnaire des tâches, dans l'onglet Processus, clic droit sur ton processus, définit la priorité "Haute" ou "Temps réel" (Temps réel peut rendre Windows instable)
Infos ici : http://sravier.free.fr/info/w2k_priorites.html
et ici http://www.vbfrance.com/codes/PROCESSPRIORITY_40455.aspx

Akim

dimanche 7 septembre 2008 à 13:36:14 | Re : Timer précis

jean_marc_n2

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

dimanche 7 septembre 2008 à 15:22:12 | Re : Timer précis

PCPT

Administrateur CodeS-SourceS
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 "

++


Prenez un instant pour répondre à ce sondage svp  

dimanche 7 septembre 2008 à 16:42:32 | Re : Timer précis

jean_marc_n2

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).

Cf. : http://faq.vb.free.fr/index.php?question=176#p5

La doc (MSDN) est indiquée en fin d'article.

(jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/





1 2

Cette discussion est classé dans : timer, cherche, windows, précis


Répondre à ce message

Sujets en rapport avec ce message

cherche code pour lancer des apps se trouvant ss windows [ par Mr.Fred. ] salut !je cherche le code pour lancer des apps windows telles que le bloc note ,la calculatrice par exemple a patir d'un exe vb.en fait je veux faire Apis Windows [ par Johjo ] Salut tout le monde.Je cherche un moyen d'obtenir la colonne dans laquelle est le curseur dans un textbox. Je cherche un moyen rapide.Je sais qu'avec Windows 95, 98, Me, 2000 ou XP ? [ par MyC ] Salut !Je cherche un moyen sûr et précis permettant de trouver la version de windows installée sur un PC.Par les API, ce n'est pas très précis, alors Je cherche un OCX [ par hayder ] L'expert ComptableJ'ai besoin d'un OCX qui permet de gérer des boîtes de dialogues dans des Forms. Je sais pas s'il existe mais windows et d'autres ap timer précis, très précis... [ par themaste ] Salut a tous!!! J'ai actuellement un prog qui me permet de connaitre le tem Bibliothèque windows et imprimante [ par grumli ] Bonjour,Je cherche à modifier l'imprimante par défaut à partir d'une appli VB, sous VB6. Je cherche, la bibliothèque de fonction générale de windows, je cherche un adaptateur wireless pour windows CE [ par BosB ] J'ai des client léger (terminaux passif qui permette de se connecter en ica, citrix, sur des bureau virtuel) que je veux mettre en reseau wiress... ce Windows Authentication [ par MrOsmose ] Bonjour, j'ai fouiller un peu partout ou je pouvais, mais je n'ai jusqu'a présent rien trouvé qui convenait a ce que je veux faire.en gros j'ai un pro VB.NET 2003 [ par eldim ] Bonjour,J'ai un gros problème : je lance une appli windows par un sub Mainqui me lance un form en showdialog qui s'insère dans le systrayLorsque je cl [VS.NET 2005][VB.NET]Exception [ par Caelum ] Bonjour, J'ai créé un programme qui charge des rapports crystal reports et son setup d'installation. Cependant quand j'installe mon appli sur un autre


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.