OVH Cloud OVH Cloud

Timer et GetTickCount

3 réponses
Avatar
Long YE-SU
J'utilise un Timer dont je paramètre l'interval par soft entre 1mS à 1000 mS

ce timer me permet de mettre en mémoire RAM des données dans plusieurs
tables.
(ces données proviennes d'une carte analogique et d'un automate S7 via un
liaison Ethernet)

en fait, le Timer ne peut pas descendre en dessous de 15mS , je le constate
car j'utilise la fonction
GetTickCount pour voir la durée de ma sauvegarde en RAM et donc
je n'arrive pas à aller en dessous de 15mS

Est ce normal ? pourquoi avec un PC plutôt rapide je ne peux avoir 1 ms par
exemple...

(Remarque : c'est une application industrielle)

Sincères salutations
Long YE-SU

3 réponses

Avatar
Clive Lumb
"Long YE-SU" a écrit dans le message de
news:4506b448$0$5076$
J'utilise un Timer dont je paramètre l'interval par soft entre 1mS à 1000


mS

ce timer me permet de mettre en mémoire RAM des données dans plusieurs
tables.
(ces données proviennes d'une carte analogique et d'un automate S7 via un
liaison Ethernet)

en fait, le Timer ne peut pas descendre en dessous de 15mS , je le


constate
car j'utilise la fonction
GetTickCount pour voir la durée de ma sauvegarde en RAM et donc
je n'arrive pas à aller en dessous de 15mS

Est ce normal ? pourquoi avec un PC plutôt rapide je ne peux avoir 1 ms


par
exemple...

(Remarque : c'est une application industrielle)

Sincères salutations
Long YE-SU



J'ai fait faire un dll il y a fort longtemps qui utiliser le "vrai" tick
count du processeur par l'appel RDTSC.
Ci-après un exemple utilisé pour calculer la vitesse d'un processeur.
Si cela t'interesse je pourrait t'envoyer une copie du dll.
Sinon il y a une bibliothèque semblable ici
http://www.vbfrance.com/codes/TIMER-SLEEP-CHRONOMETRAGE-VITESSE-PROCESSEUR-MICROSECONDE-PRES_33376.aspx


Declare Function RDTSC Lib "cputime.dll" () As Double

Function GetCPUSpeed(wait_for As Single)
' Returns CPU frequency of recent Intel processors that support the RDTSC
call
' Measures frequency over a period of "wait_for" seconds
' Generally wait_for >= 2.5 for an accurate result
' (So far hes been tested succesfully on PIV, PIII, PII, PI, CyrixMX & AMD
K6-3D, Duron, Athlon
' fails on Cyrix PR200)
' Requires CPUtime.dll - kindly supplied by Mike Bobowski of MGS Tech
' Place the following declaration in the module header
' Declare Function RDTSC Lib "CPUtime.dll" () As Double
' and place a copy of CPUtime.dll in the system(32) or application
directory

Dim RT_Start As Single
Dim RT_End As Single
Dim RT_Elapsed As Single
Dim CPU_Cycles As Double
Dim CPU_ClockStart As Double
Dim CPU_ClockEnd As Double
' Initialise start values of timers
' Do the 'timer' one first since it is the slowest
RT_Start = Timer
RT_End = RT_Start
On Error GoTo No_RDTSC
CPU_ClockStart = RDTSC
On Error GoTo 0
' Run for 1 seconds
While RT_End - RT_Start < wait_for
RT_End = Timer
Wend
CPU_ClockEnd = RDTSC
'Calculate real elapsed time
RT_Elapsed = RT_End - RT_Start
'Calculate CPU clock cycles
CPU_Cycles = CPU_ClockEnd - CPU_ClockStart
'The clock speed is then derived by the following equation:
GetCPUSpeed = CPU_Cycles / (RT_Elapsed * 1000000)
Exit Function
No_RDTSC:
GetCPUSpeed = 0
Exit Function
Resume Next

End Function
Avatar
Long YE-SU
merci
je vais vois dans ce sens.

Sincères salutations
Long YE-SU

"Clive Lumb" a écrit dans le message
de news:

"Long YE-SU" a écrit dans le message de
news:4506b448$0$5076$
> J'utilise un Timer dont je paramètre l'interval par soft entre 1mS à


1000
mS
>
> ce timer me permet de mettre en mémoire RAM des données dans plusieurs
> tables.
> (ces données proviennes d'une carte analogique et d'un automate S7 via


un
> liaison Ethernet)
>
> en fait, le Timer ne peut pas descendre en dessous de 15mS , je le
constate
> car j'utilise la fonction
> GetTickCount pour voir la durée de ma sauvegarde en RAM et donc
> je n'arrive pas à aller en dessous de 15mS
>
> Est ce normal ? pourquoi avec un PC plutôt rapide je ne peux avoir 1 ms
par
> exemple...
>
> (Remarque : c'est une application industrielle)
>
> Sincères salutations
> Long YE-SU

J'ai fait faire un dll il y a fort longtemps qui utiliser le "vrai" tick
count du processeur par l'appel RDTSC.
Ci-après un exemple utilisé pour calculer la vitesse d'un processeur.
Si cela t'interesse je pourrait t'envoyer une copie du dll.
Sinon il y a une bibliothèque semblable ici



http://www.vbfrance.com/codes/TIMER-SLEEP-CHRONOMETRAGE-VITESSE-PROCESSEUR-M
ICROSECONDE-PRES_33376.aspx


Declare Function RDTSC Lib "cputime.dll" () As Double

Function GetCPUSpeed(wait_for As Single)
' Returns CPU frequency of recent Intel processors that support the RDTSC
call
' Measures frequency over a period of "wait_for" seconds
' Generally wait_for >= 2.5 for an accurate result
' (So far hes been tested succesfully on PIV, PIII, PII, PI, CyrixMX & AMD
K6-3D, Duron, Athlon
' fails on Cyrix PR200)
' Requires CPUtime.dll - kindly supplied by Mike Bobowski of MGS Tech
' Place the following declaration in the module header
' Declare Function RDTSC Lib "CPUtime.dll" () As Double
' and place a copy of CPUtime.dll in the system(32) or application
directory

Dim RT_Start As Single
Dim RT_End As Single
Dim RT_Elapsed As Single
Dim CPU_Cycles As Double
Dim CPU_ClockStart As Double
Dim CPU_ClockEnd As Double
' Initialise start values of timers
' Do the 'timer' one first since it is the slowest
RT_Start = Timer
RT_End = RT_Start
On Error GoTo No_RDTSC
CPU_ClockStart = RDTSC
On Error GoTo 0
' Run for 1 seconds
While RT_End - RT_Start < wait_for
RT_End = Timer
Wend
CPU_ClockEnd = RDTSC
'Calculate real elapsed time
RT_Elapsed = RT_End - RT_Start
'Calculate CPU clock cycles
CPU_Cycles = CPU_ClockEnd - CPU_ClockStart
'The clock speed is then derived by the following equation:
GetCPUSpeed = CPU_Cycles / (RT_Elapsed * 1000000)
Exit Function
No_RDTSC:
GetCPUSpeed = 0
Exit Function
Resume Next

End Function




Avatar
X
Bonjour,

T'as déjà de la chance de voir 15ms, avec tout le cheminement... Je
doute que le timer descende à 1ms, car il n'aurait pas le temps d'exécuter
ce qu'il doit faire, dans une application classique, généralement entre 50ms
et 1 ms on ne voit aucune différence...

--
Site ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site LOGICIELS
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
"Long YE-SU" a écrit dans le message de news:
4506b448$0$5076$
J'utilise un Timer dont je paramètre l'interval par soft entre 1mS à 1000
mS

ce timer me permet de mettre en mémoire RAM des données dans plusieurs
tables.
(ces données proviennes d'une carte analogique et d'un automate S7 via un
liaison Ethernet)

en fait, le Timer ne peut pas descendre en dessous de 15mS , je le
constate
car j'utilise la fonction
GetTickCount pour voir la durée de ma sauvegarde en RAM et donc
je n'arrive pas à aller en dessous de 15mS

Est ce normal ? pourquoi avec un PC plutôt rapide je ne peux avoir 1 ms
par
exemple...

(Remarque : c'est une application industrielle)

Sincères salutations
Long YE-SU