papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Chronométrer un traitement en haute précision Mer 27 Avr 2016 - 6:56 | |
| Vous trouvez qu'une milliseconde c'est trop long ? Vous voulez compter en microseconde? D'accord ! On y va - Code:
-
rem ============================================================================ rem Chronométrer un traitement en haute précision rem en fraction de microseconde rem ============================================================================ ' "QueryPerformanceCounter" de kernel32.dll compte le nombre de cycle ' d'horloge du microprocesseur ' "QueryPerformanceFrequency" donne quant à elle le nombre de cycle pour une seconde ' Ces deux API nous permettent de mesurer des écarts de temps de l'ordre du ' millionième de seconde. rem ============================================================================
dim ret%,Ctr1, Ctr2, freq,Acc,i font_bold 0 dll_on "kernel32" ret% = dll_call1("QueryPerformanceCounter",adr(Ctr1)) : ' Commence le chronométrage. if ret% = 1 for i = 1 to 100 Acc = Acc + 1 next i ret% = dll_call1("QueryPerformanceCounter",adr(Ctr2)) : ' Termine le chronométrage. print "Valeur de début : " + str$(Ctr1) print "Valeur de fin : " + str$(Ctr2) ret% = dll_call1("QueryPerformanceFrequency",adr(freq)) print "Résolution minimale de QueryPerformanceCounter : 1 / " + str$(freq) print "Temps par incréments de 100 : " + str$((Ctr2 - Ctr1) / Freq) + " secondes." else print "Compteur haute résolution non pris en charge." End_If end rem ============================================================================
| |
|
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Chronométrer un traitement en haute précision Jeu 28 Avr 2016 - 11:22 | |
| Je connais ça, mais ce n'est pas utile(selon moi) car panoramic ne mesure pas des millisecondes, mais des soixantième de seconde. - Code:
-
' panoramic 0927i7 ' dim init%, old_temps%, cpt%, temps%, old_cpt% init%=NUMBER_TICKS old_temps%=init% cpt%=0 old_cpt%=cpt%
' mesure pendant 100 ms while temps%<init%+100 temps%=NUMBER_TICKS cpt%=cpt%+1 ' if (temps%-old_temps%)>0 print "delta temps = ";(temps%-old_temps%);string$(20," ");"nb de bouclage = ";cpt%-old_cpt% old_cpt%=cpt% end_if ' old_temps%=temps% end_while
| |
|