Velocidade do processador (Hz)
31/03/2003
0
Outro dia precisei de uma função que me retornasse o número de ciclos do processador...
O amigo e_gama respondeu, veja a resposta em: http://clubedelphi.videomart.com.br/viewtopic.php?t=7263&start=0&postdays=0&postorder=asc&highlight=
A função retorna o número de ciclos do processador. Sabendo que tais ciclos são medidos em Hertz e seus multiplos (MHz, GHz...) agora eu preciso de uma função que retorne a frequencia (velocidade) do processador, com essa informação e a função de contagem de ciclos poderei dizer de uma forma legivel (H:M:S) por quanto tempo uma máquina está ligada..
A frequencia (Hz) é o mesmo que ciclos por segundo...
se eu tenho a quantidade de ciclos e a frenquencia com que um determinado processador trabalha poderei obter por divisão um número em segundos, que representa o tempo de uso de uma máquina...
Resumo:
[b:dc34b890ee]Preciso de uma função que me retorne a velocidade de um processador em Hz (ou seus múltiplos). Quanto mais preciso melhor, mas pode ser uma média.[/b:dc34b890ee]
Carlos Filho
Posts
31/03/2003
Aroldo Zanela
const ID_BIT = $200000; // EFLAGS ID bit function GetCPUSpeed: Double; const DelayTime = 500; var TimerHi, TimerLo: DWORD; PriorityClass, Priority: integer; begin try priorityclass := getpriorityclass(GetCurrentProcess); Priority := GetThreadPriority(GetCurrentThread); SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL); Sleep(10); asm dw 310Fh // rdtsc mov TimerLo, eax mov TimerHi, edx end; Sleep(DelayTime); asm dw 310Fh // rdtsc sub eax, TimerLo sbb edx, TimerHi mov TimerLo, eax mov TimerHi, edx end; SetThreadPriority(GetCurrentThread, Priority); SetPriorityClass(GetCurrentProcess, PriorityClass); Result := TimerLo / (1000.0 * DelayTime); except end; end; procedure TForm1.Button1Click(Sender: TObject); var cpuspeed : string; begin cpuspeed := format(´¬f MHz´, [getcpuspeed]); edit1.text := cpuspeed; end;
31/03/2003
Carlos Filho
const ID_BIT = $200000; // EFLAGS ID bit function GetCPUSpeed: Double; const DelayTime = 500; var TimerHi, TimerLo: DWORD; PriorityClass, Priority: integer; begin try priorityclass := getpriorityclass(GetCurrentProcess); Priority := GetThreadPriority(GetCurrentThread); SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL); Sleep(10); asm dw 310Fh // rdtsc mov TimerLo, eax mov TimerHi, edx end; Sleep(DelayTime); asm dw 310Fh // rdtsc sub eax, TimerLo sbb edx, TimerHi mov TimerLo, eax mov TimerHi, edx end; SetThreadPriority(GetCurrentThread, Priority); SetPriorityClass(GetCurrentProcess, PriorityClass); Result := TimerLo / (1000.0 * DelayTime); except end; end; procedure TForm1.Button1Click(Sender: TObject); var cpuspeed : string; begin cpuspeed := format(´¬f MHz´, [getcpuspeed]); edit1.text := cpuspeed; end;
valeu pela ajuda, vou testar agora!
31/03/2003
E_gama
[url]http://br.groups.yahoo.com/group/es_gama_ejay/files/calcticks.zip[/url]
01/04/2003
Carlos Filho
Opa
valeu pela dica, vou pegar o arquivo...
Mas já terminei o programa
é coisa simples mesmo ele conta o tempo que a máquina está ligada...
é simples. valeu!
Clique aqui para fazer login e interagir na Comunidade :)