Un counter (compteur, en français) est un outil permettant de calculer le temps écoulé entre deux événements. Les précisions sont plus ou moins grandes dépendant de l'outil utilisé pour définir le temps du début et le temps de la fin. Par exemple, un compteur mental (vous dites 1, 2, 3 dans votre tête) sera moins précis qu'un système de détection laser pour savoir quel athlète a gagné la course.
Avec l'évolution des ordinateurs, l'on est maintenant capable d'atteindre des précisions de l'ordre de la milliseconde, de la microseconde et même, pour les nouveaux ordinateurs, la nanoseconde.
C'est ce que je vous propose de faire avec cette source.
Cette dernière contient une unité Counters, qui comporte elle-même des fonctions pour gérer un compteur. Je vous propose de télécharger cette source, de tester l'exemple puis de vous plonger dans le code de l'unité Counters.
Rien de très compliqué, je vous rassure. Simplement une paire de soustractions, une division, une multiplication, et voilà vous avez votre compteur.
Il suffit d'appeller des fonctions, un peu comme des API (dans la déclaration), pour créer vos compteurs, les libérer et les gérer. Bien sûr vous pouvez également utiliser la classe TCounter si vous préférez travailler avec des objets (cette classe gérera tout pour vous !). Cependant l'exemple reste avec les fonctions.
L'on peut choisir la précision que l'on veut pour le compteur, même si je limite dans l'exemple la précision de la seconde à la nanoseconde.
Parlons maintenant de l'exemple. Tout d'abord, une possibilité de choisir entre plusieurs précisions, la possibilité de réinitialiser le compteur, etc ... des activités pour ne pas rendre l'exemple débile, comme le calcul de votre temps de réaction (cliquez quand la fenêtre devient rouge), et le temps que met la calculatrice Windows pour se lancer ^^. En prime, le temps d'execution de quelques fonctions couramment utilisées, moyennant un petit "case..of".
Je pense avoir tout dit, vous pouvez eventuellement déposer votre temps de réaction ici :p j'ai fait 214.73 millisecondes en meilleur temps.