自己レスです。
しつこく GetSystemTimes ですが、サンプルを見つけたので
プログラムしてみました。
内容は?です。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Timer1: TTimer;
Edit2: TEdit;
Edit3: TEdit;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
var
oit,nit,okt,nkt,oust,nust:Double;
implementation
{$R *.dfm}
function GetSystemTimes(var lpIdleTime:FileTime; var lpKernelTime: FileTime;
var lpUserTime: FileTime): Boolean; stdcall;external 'Kernel32.dll';
function FileTime2Double(FileT: FileTime): Double;
begin
Result := FileT.dwHighDateTime* 4.294967296E9 + FileT.dwLowDateTime;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
oit := 0.0;
nit := oit;
okt := oit;
nkt := oit;
oust := oit;
nust := oit;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
IdleTime,KernelTime,UserTime:FILETIME;
begin
GetSystemTimes(IdleTime,KernelTime,UserTime);
nit := FileTime2Double(IdleTime);
nkt := FileTime2Double(KernelTime);
nust := FileTime2Double(UserTime);
// 1秒間のそれぞれの使用された時間
oit := nit - oit;
okt := nkt - okt;
oust := nust - oust;
// IdleTime,KernelTime,UserTimeの関係が今ひとつ分かりません
Edit1.Text := FloatToStr(oit/(oit+okt+oust)*100);
Edit2.Text := FloatToStr(okt/(oit+okt+oust)*100);
Edit3.Text := FloatToStr(oust/(oit+okt+oust)*100);
oit := nit;
okt := nkt;
oust := nust;
end;
end.
|