Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312 Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :
Message
par Le Soldat Inconnu » lun. 27/févr./2012 23:26
Salut,
J'avais besoin de plus précis que le ElapsedMilliseconds.
Donc voici 1000 fois plus précis
Code : Tout sélectionner
Procedure.q ElapsedTime()
Protected ElapsedTime.q
QueryPerformanceCounter_(@ElapsedTime)
ProcedureReturn ElapsedTime
EndProcedure
Procedure.q ElapsedNanoseconds()
Protected ElapsedTime.q
Static Frequency.q
QueryPerformanceCounter_(@ElapsedTime)
If Frequency = 0
QueryPerformanceFrequency_(@Frequency)
EndIf
ElapsedTime * 1000000 / Frequency
ProcedureReturn ElapsedTime
EndProcedure
Temps1 = ElapsedTime()
Delay(1000)
Temps2 = ElapsedTime()
Delay(1000)
Temps3 = ElapsedTime()
Delay(1000)
Temps4 = ElapsedTime()
Debug "Retour du compteur de performance"
Debug Temps2 - Temps1
Debug Temps3 - Temps2
Debug Temps4 - Temps3
Temps1 = ElapsedNanoseconds()
Delay(1000)
Temps2 = ElapsedNanoseconds()
Delay(1000)
Temps3 = ElapsedNanoseconds()
Delay(1000)
Temps4 = ElapsedNanoseconds()
Debug "Temps système écoulé en nanosecondes"
Debug Temps2 - Temps1
Debug Temps3 - Temps2
Debug Temps4 - Temps3
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64) ]
case
Messages : 1546 Inscription : lun. 10/sept./2007 11:13
Message
par case » lun. 27/févr./2012 23:46
je savais pas qu'on pouvait avoir plus précis que la milliseconde en temps système
comtois
Messages : 5186 Inscription : mer. 21/janv./2004 17:48
Contact :
Message
par comtois » mar. 28/févr./2012 7:49
case a écrit : je savais pas qu'on pouvait avoir plus précis que la milliseconde en temps système
C'est que tu ne lis pas assez la
FAQ de DVP
PAPIPP
Messages : 534 Inscription : sam. 23/févr./2008 17:58
Message
par PAPIPP » mar. 28/févr./2012 8:41
Bonjour LSI
J'ai obtenu des valeurs négatives.
Après correction TEMPSx.Q, les résultats sont meilleurs.
Code : Tout sélectionner
Procedure.q ElapsedTime()
Protected ElapsedTime.q
QueryPerformanceCounter_(@ElapsedTime)
ProcedureReturn ElapsedTime
EndProcedure
Procedure.q ElapsedNanoseconds()
Protected ElapsedTime.q
Static Frequency.q
QueryPerformanceCounter_(@ElapsedTime)
If Frequency=0
QueryPerformanceFrequency_(@Frequency)
EndIf
ElapsedTime*1000000/Frequency
ProcedureReturn ElapsedTime
EndProcedure
Temps1.q=ElapsedTime()
Delay(1000)
Temps2.q=ElapsedTime()
Delay(1000)
Temps3.q=ElapsedTime()
Delay(1000)
Temps4.q=ElapsedTime()
Debug "Retour du compteur de performance"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3
Temps1=ElapsedNanoseconds()
Delay(1000)
Temps2=ElapsedNanoseconds()
Delay(1000)
Temps3=ElapsedNanoseconds()
Delay(1000)
Temps4=ElapsedNanoseconds()
Debug "Temps système écoulé en nanosecondes"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3
@+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
djes
Messages : 4252 Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France
Message
par djes » mar. 28/févr./2012 8:46
Oui, c'est vieux comme Hérode ce truc, mais bon, c'est bien d'avoir un topic là-dessus
A noter que c'est moyennement fiable, voir là :
http://www.purebasic.fr/english/viewtop ... ceCounter_ , sauf à avoir besoin d'un comptage très précis assez court sur la durée.
Il y a plusieurs exemples sur les forums.
PAPIPP
Messages : 534 Inscription : sam. 23/févr./2008 17:58
Message
par PAPIPP » mar. 28/févr./2012 9:17
Bonjour à tous
La procédure suivante donne le nombre de cycle machine. Elle évite les API
Et d’autre part elle donne les mêmes résultats.
http://www.purebasic.fr/french/viewtopi ... TSC#p97997
On peut donc trouver un rapport entre le nb de cycles et le temps en nanoseconde.
Code : Tout sélectionner
Procedure.q nbcs()
!RDTSC
ProcedureReturn
EndProcedure
Procedure.q ElapsedTime()
Protected ElapsedTime.q
QueryPerformanceCounter_(@ElapsedTime)
ProcedureReturn ElapsedTime
EndProcedure
Procedure.q ElapsedNanoseconds()
Protected ElapsedTime.q
Static Frequency.q
QueryPerformanceCounter_(@ElapsedTime)
If Frequency=0
QueryPerformanceFrequency_(@Frequency)
EndIf
ElapsedTime*1000000/Frequency
ProcedureReturn ElapsedTime
EndProcedure
Temps1.q=ElapsedTime()
Delay(1000)
Temps2.q=ElapsedTime()
Delay(1000)
Temps3.q=ElapsedTime()
Delay(1000)
Temps4.q=ElapsedTime()
Debug "Retour du compteur de performance"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3
Temps1=ElapsedNanoseconds()
Delay(1000)
Temps2=ElapsedNanoseconds()
Delay(1000)
Temps3=ElapsedNanoseconds()
Delay(1000)
Temps4=ElapsedNanoseconds()
Debug "Temps système écoulé en nanosecondes"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3
Temps1=nbcs()
Delay(1000)
Temps2=nbcs()
Delay(1000)
Temps3=nbcs()
Delay(1000)
Temps4=nbcs()
Debug "Temps système écoulé en cycle"
Debug Temps2-Temps1
Debug Temps3-Temps2
Debug Temps4-Temps3
@+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
djes
Messages : 4252 Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France
Message
par djes » jeu. 01/mars/2012 9:35