Hallo,
ich habe folgendes vor:
Ich will in Delphi ein Tool programmieren, welches mir grafisch die Prozessorauslastung anzeigt (wie im Taskmanager der Performancemonitor).
Ich habe bereits Tests vorgenommen und bekomme die Anzahl der Kerne heraus. Beim Auslesen der maximalen Frequenz komme ich an meine Grenzen ...
Folgende Fragen ergeben sich da für mich:
1. Wie kann ich eine "Kurve" zeichnen, die sich selbst aktualisert?
2. Wie kann ich pro KERN die MAX. Frequenz auslesen?
3. Wie lese ich pro KERN die aktuelle Last aus?
Ich weiss, ich soll die Suchfunktion benutzen ... aber die Ergebnisse sind nicht schlüssig und teilweise nicht aktuell. Wenn jemand ne Idee hat, wäre ich dankbar.
Fortschritt:
Ich nutze zum Auslesen der max. Frequenz immo folgenden CODE:
Delphi-Quellcode:
function CPU_SPEED_FLOAT: Extended;
const
DelayTime = 500;
// measure time in ms
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);
try
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;
finally
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
end;
Result := TimerLo / (1000.0 * DelayTime);
except
Result := 0;
end;
end;
Zum Auslesen der Kern-Anzahl benutze ich folgenden Code:
Delphi-Quellcode:
function CPUCORES : DWord;
var
SysInfo : TSystemInfo;
begin
GetSystemInfo(SysInfo);
Result := SysInfo.dwNumberOfProcessors;
end;