Get CPU Usage

unit Unit1;

interface

uses
 
Windows, Messages, SysUtils,
  Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Buttons;

type
 
TForm1 = class
(TForm)
    Label1 : TLabel;
   
procedure
Label1Click(Sender: TObject);
   
procedure
Label1DblClick(Sender: TObject);
 
private
   
{ Private declarations }
 
public
   
{ Public declarations }
 
end
;

var
 
Form1 : TForm1;
  stop  : boolean;

implementation

{$R *.DFM}

function GetCPUSpeed : Double;
const
 
DelayTime = 500; // measure time in ms
var
 
TimerHi, TimerLo : DWORD;
  PriorityClass, Priority : Integer;
begin
 
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);
end;


procedure TForm1.Label1Click(Sender: TObject);
begin
Stop := False;
 
while not Stop do
  begin
   
label1.Caption := Format('CPU speed: %f MHz',
                                       [GetCPUSpeed]);
    Application.ProcessMessages;
 
end;
end;


procedure TForm1.Label1DblClick(Sender: TObject);
begin
 
Stop := True;
end;

end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值