Velocidade do processador (Hz)

31/03/2003

0

Aqui estou eu novamente com mais uma pergunta de resposta útil...

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

Carlos Filho

Responder

Posts

31/03/2003

Aroldo Zanela

Peguei aqui no Clube:
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;



Responder

31/03/2003

Carlos Filho

[quote:42cdb05962=´Aroldo Zanela´]Peguei aqui no Clube:
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;
[/quote:42cdb05962]

valeu pela ajuda, vou testar agora!


Responder

31/03/2003

E_gama

Amigo Derek, caso queira dar uma olhada, segue um exemplo que faz isso. Na verdade, o código é muito parecido com esse que o nosso amigo Aroldo Zanela postou.

[url]http://br.groups.yahoo.com/group/es_gama_ejay/files/calcticks.zip[/url]


Responder

01/04/2003

Carlos Filho

Amigo Derek, caso queira dar uma olhada, segue um exemplo que faz isso. Na verdade, o código é muito parecido com esse que o nosso amigo Aroldo Zanela postou. [url]http://br.groups.yahoo.com/group/es_gama_ejay/files/calcticks.zip[/url]


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!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar