Bonjour à tous!
Je cherche un moyen simple de réaliser un chronomètre, soit en pascal soit en assembleur, peu importe. Si quelqu'un aurait une idée sur la chose ça me dépannerait pas mal...
Merci d'avance
Bonjour à tous!
Je cherche un moyen simple de réaliser un chronomètre, soit en pascal soit en assembleur, peu importe. Si quelqu'un aurait une idée sur la chose ça me dépannerait pas mal...
Merci d'avance
Trois labels, deux boutons et un timer.
A chaque seconde, le timer ajoute 1 à un label.
Lorsque ce label arrive à 60, il ajoute un à celui d'à côté.
Ainsi de suite.
Un bouton pour activer le timer, un bouton pour l'arrêter.
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Méfiance quand même si tu veux un peu de précision car avec certains système d'exploitation les timers sont très imprécis (voir aléatoires), j'avais constaté ca avec W98.
Sans blague ?Envoyé par Alfred12
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Je l'ai moi aussi toujours entendu dire, et par des gens sérieux 8) . Mais on tourne le pb si le Timer, au lieu de simplement incrémenter une variable, va lire l'horloge système.Envoyé par MD Software
Roland
Roland
J'avais fait ce genre de bout de code pour vérifier la précision des timers.
Renvoie l'écart entre deux appels en millisecondes.
Sous W98 il pouvait y avoir des écarts importants (genre 750 millisecondes pour 1000), sous NT ca allait mieux, et sous XP j'ai pas testé vu que c'est un vieux truc.
En tous cas, mieux vaut ne pas faire de temps réel avec çà !
D'ailleurs il est presque fini ton chrono avec çà...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure DeltaTimer : integer; var lNewTimer : TSystemTime; begin { Temps écoulé entre deux appels timer, pour vérification } GetSystemTime(lNewTimer); Result := lNewTimer.wMilliseconds - FOldTimer.wMilliseconds + (lNewTimer.wSecond - FOldTimer.wSecond) * 1000 + (lNewTimer.wMinute - FOldTimer.wMinute) * 60000; FOldTimer := lNewTimer; end;
De toute façon, je le rappelle, il n'est pas possible de faire du temps réel [du vrai] avec un processeur avec mémoire cache.
Mais dans le cas de PoOky, je pense que l'écart est acceptable. A toi de voir PoOky.
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
Extrait d'une QR pour la prochaine FAQ :
J'obtiens une précision de 0.3 nanosecondes sur ma machine, par exemple. Le délai de "clic" de ton bouton est au moins cent fois plus important... Avantage, c'est facilement automatisable (le code ci-dessus en est la preuve).Utiliser les fonctions de compteur hautes performances (CHP) de l'API Win32 : fonctions QueryPerformanceFrequency et QueryPerformanceCounter (Windows.pas).
La première renvoie la fréquence (en hertz) du compteur HP de la machine, la seconde renvoie la valeur courante d'un compteur libre. La résolution est souvent de l'ordre d'une nanoseconde (un milliardième de seconde).
Déclarez ces variables :Pour effectuer le chronométrage lui-même :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Var FFrequency : Int64 ; // Fréquence du compteur hautes performances. FStart, FStop : Int64 ; // Valeurs du compteur au début et à la fin du chrono. FElapsed : Extended ; // Durée finale, en secondes.La résolution de ce compteur est en général très élevée : il n'est pas rare que ce soit la fréquence du processeur qui serve de base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // Initialisation du compteur hautes performances, et début du chronométrage. If Not QueryPerformanceFrequency(FFrequency) Then Raise Exception.Create('Pas de compteur hautes performances.'); QueryPerformanceCounter(FStart) ; // Insérer ici l'opération à chronométrer, ou un appel de fonction. // Fin de chronométrage, conversion du temps écoulé en secondes. QueryPerformanceCounter(FStop) ; FElapsed := (FStop-FStart)/FFrequency ;
Sur un système donné, elle ne change jamais, mais elle varie d'un système à un autre : il est donc impératif de toujours récupérer la fréquence par un appel au système. Cet appel peut n'être fait qu'une seule fois dans le programme.
De même, certaines machines ne possèdent pas ce compteur : il est donc nécessaire également de tester le retour de QueryPerformanceFrequency (les tests ultérieurs peuvent souvent être omis, car ils n'échouent normalement jamais si l'obtention de la fréquence a réussi la première fois).
Liens :
MSDN : QueryPerformanceFrequency et QueryPerformanceCounter
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
L'horloge système est normalement plutôt juste, car synchronisée sur la RTC (horloge temps réel) de ta carte mère.Envoyé par Alfred12
Mais les timers Windows (TTimer en Delphi) sont pilotés par des messages Windows : faut pas vraiment t'étonner s'ils ne sont pas précis... D'ailleurs, ils ne sont pas faits pour ça non plus.
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager