Bonjour,
J'aurai voulu savoir comment faire pour obtenir une précision du type hh:mm:ss:ms(milliseconde) en utilisant la fonction time
merci
Bonjour,
J'aurai voulu savoir comment faire pour obtenir une précision du type hh:mm:ss:ms(milliseconde) en utilisant la fonction time
merci
Salut,
tu dis bien "en utilisant la fonction Time" ?
La précision de cette fonction est en secondes.
D'autres fonctions peuvent aller plus loin (pas dans l'heure mais dans la mesure du temps écoulé) , mais pas, précisément, la fonction Time que tu poses comme celle à utiliser et qui, elle, ne concerne que l'heure...
Edit : si tu n'avais pas limité à la fonction Time, on t'aurait peut-être parlé de la fonction Timer
Avant qu'on ne se précipite sur moi (je tiens à dormir tranquille) :
un petit test, hein ...
voilà ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private coucou As single Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) coucou = Timer DoEvents End Sub Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) MsgBox Abs(Timer - coucou) End Sub
faire des clicks plus ou moins longs et voir...
La précision, toutefois, ne sera jamais, pour les durées très courtes, celle du millième de seconde (pas plus, d'ailleurs, que ne le serait, pour des durées de même grandeur, celle de la fonction GetTickCount de l'Api de Windows)
Voilà... je peux maintenant aller dormir.![]()
Bonjour, Leforestier,
Si c'est ce à quoi je pense :
- il ne s'agit pas d'un Timer mais d'un compteur de fréquence dont le défaut essentiel est d'être totalement dépendant de la machine d'hébergement ...
- les essais faits sur plusieurs machines ont révélé les mêmes faiblesses en ce qui concerne les mesures de durées extrêmement courtes... et ce y compris sur des machines très performantes.
En voilà une évidente, déjà (et parmi d'autres) , de raison de faiblessse : la vitesse de rafraichissement de l'écran. Il y en a bien d'autres, en passant par la RAM...
Nous étions il y a environ 6 mois assez nombreux à nous pencher sur ce problème et nous sommes arrivés à la conclusion selon laquelle il était possible, au delà d'une certaine durée, de calculer des écarts très infimes, mais qu'il était impossible d'y parvenir pour des durées elles-mêmes trop courtes.... Les tests ont duré plusieurs semaines, sur plusieurs machines, réparties d'un bout à l'autre de la terre ...
Edit : Il me parait utile d'ajouter ici qu'il peut être intéressant, dans le cadre d'un "Bench test", d'utiliser ce compteur de performance sur une machine performante, mais qu'il est totalement déconseillé (c'est évident) de distribuer une application qui utiliserait ce compteur (pas ce "timer") dans le but d'effectuer des mesures précises.
Edit 2 : cette conversation (bien que fort incomplète...) a été trouvée tout près d'ici....
http://www.developpez.net/forums/arc...hp/t-7806.html
Elle aurait pu sans aucun doute être complétée par une foule d'autres petites choses sur lesquelles l'impasse a été faite .... Mais l'essentiel y est malgré tout. Lis-la calmement et tire les conclusions qui s'imposent en matière de dépendance à l'outil (relire mon autre édit).
Bonjour,
Eh bien non, ucfoutu, ce n'est pas ce à quoi tu pense, à moins que MSDN ne puisse faire la différence entre fréquence et temps...
J'ai expérimenté l'exemple qui emploi cette minuterie et c'est bien en millionième.' Ce module utilise l'API SetTimer et l'opérateur AddressOf pour
' initialiser une minuterie en code seul. Lorsque
' ce type de minuterie est défini, le système
' continue d'appeler la fonction TimerProc
' MÊME LORSQUE VOUS REPASSEZ EN MODE CRÉATION.
A+
PS: Que ça ne t'empêche par de dormir ..![]()
Re,
je ne sais pas où tu vas, mais cette méthode a (après plusieurs tests) exactement les mêmes inconvénients que les autres, dès que la durée à évaluer est inférieure à enviton 17 millisecondes ...
(je se sais pas si tu sais, à ce propos, que la fonction Timer est ce qu'elle utilise précisément elle même. Si tu types en double la variable affectée à la fonction Timer, tu y verras également des "millionièmes"... qui n'en sont pas vraiment, eux non plus, surtout si les mesures sont prises à moins de 17 millisecondes d'intervalle..).
Mais ne nous éternisons pas avec ces machins-là dont je sais qu'ils ne conduisent quasiment nulle part de façon sûre.
Revenons à l'objet de cette discussion : afficher l'heure avec les millisecondes :
Voilà ce que je propose (je n'ai pas mieux, après plusieurs autres démarches qui arrivent au même résultat tout en ayant besoin de plus de code !!!) :
J'y ai mis un affichage permettant certaines comparaisons.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Sub CommandButton1_Click() Dim montimer As Double, horloge As Date, nbsecondes As Single, nbheures As Integer, nbminutes As Integer '========================================================================= ' ceci uniquement pour vérifier que l'on parle bien des mêmes choses montimer = Timer horloge = Time nbsecondes = montimer nbheures = nbsecondes \ 3600 nbminutes = (nbsecondes Mod 3600) \ 60 nbsecondes = (nbsecondes Mod 3600) Mod 60 '===================================================================== MsgBox "notre timer en est à " & nbheures & ":" & nbminutes & ":" & nbsecondes & vbCrLf & _ " et la fonction time affiche " & horloge & vbCrLf & _ "l'heure exacte (avec les millisecondes) est : " & _ horloge & ":" & Format(Int((montimer - Int(montimer)) * 1000), "000") End Sub
Partager