AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) adCpuUsage.GetCPUCount bei XE2 64bit immer 0
Thema durchsuchen
Ansicht
Themen-Optionen

adCpuUsage.GetCPUCount bei XE2 64bit immer 0

Ein Thema von NooL · begonnen am 3. Jun 2013 · letzter Beitrag vom 5. Jun 2013
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: adCpuUsage.GetCPUCount bei XE2 64bit immer 0

  Alt 5. Jun 2013, 11:25
Unter 32-Bit ist es eine nullterminierende Zeichenkette und unter 64-Bit eine Ganzzahl? Sehe ich das richtig?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
NooL

Registriert seit: 26. Okt 2008
Ort: Dreiländereck
15 Beiträge
 
Delphi 7 Professional
 
#2

AW: adCpuUsage.GetCPUCount bei XE2 64bit immer 0

  Alt 5. Jun 2013, 13:31
Jupp...

die genaue Info steht zum Beispiel hier:

http://dev.stackheap.com/trac/kuiper...lude/WinPerf.h

Code:
#ifdef _WIN64
 DWORD          ObjectNameTitle;   // Should use this as an offset
#else
 LPWSTR         ObjectNameTitle;   // Initially NULL, for use by
                                   // analysis program to point to
                                   // retrieved title string
#endif

#ifdef _WIN64
 DWORD          ObjectHelpTitle;   // Should use this as an offset
#else
 LPWSTR         ObjectHelpTitle;   // Initially NULL, for use by
                                   // analysis program to point to
                                   // retrieved title string
#endif
Bis zu 32 Kerne kann ich jetzt per Gauge anzeigen. Was mich nur
noch ein bisschen wundert, das GetCPUUsage auch negative Werte
liefert ??? Jedoch die Anzeige entspricht dem des Task Managers.

Weiß da jemand etwas darüber, ob das bei dem Auslesen der
TPERF_DATA_BLOCK.SystemTime normal ist, mit den Negativwerten ???

Gruß
Nool
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: adCpuUsage.GetCPUCount bei XE2 64bit immer 0

  Alt 5. Jun 2013, 15:06
Ich habe mal ein anderes Tool und den Taskmanager mit CPU-Aussteuerung für alle Kerne gegen die Demo laufen lassen und es sieht für mich so aus, als ob immer die höchste CPU (in meinem Fall #4) den Durchschnittswert ausgibt.
CPU #0 bis #3 sind die einzelnen Kerne.
Kann das jemand bestätigen?

(getestet unter Win7 64bit Ultimate, kompiliert mit XE4 32bit)
Stefan

Geändert von GPRSNerd ( 5. Jun 2013 um 15:40 Uhr)
  Mit Zitat antworten Zitat
NooL

Registriert seit: 26. Okt 2008
Ort: Dreiländereck
15 Beiträge
 
Delphi 7 Professional
 
#4

AW: adCpuUsage.GetCPUCount bei XE2 64bit immer 0

  Alt 5. Jun 2013, 18:49
Ja, so ist es. Bei meiner 8 Kerner werden 9 Werte ( 0 - 8 ) ausgelesen.
0-7 sind die 8 Kerne und der 9.Wert ( 8 ) soll der Durchschnitt
aller Kerne sein.
Diesen zusätzlichen Wert blende ich aus bzw. benutze ich nicht.
Habe es auch noch bei einer 4 Kern, 2 Kern und bei einem Server mit
32 Kernen ausprobiert. Dort war es auch so.

Was mich nur stutzig macht, sind die negativen Werte die GetCPUUsage
zurück gibt??? Die Frage ist, ist das so gewollt, oder doch noch ein
weiterer Fehler ???
Code:
result:=1-(_Counters[index] - _PrevCounters[index])/(_SysTime-_PrevSysTime);
Kennt sich damit jemand aus bzw. kann das einer der adCpuUsage auch nutzt, mal
irgendwie überprüfen ???
Nool

Geändert von NooL ( 5. Jun 2013 um 18:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: adCpuUsage.GetCPUCount bei XE2 64bit immer 0

  Alt 5. Jun 2013, 19:50
Was mich nur stutzig macht, sind die negativen Werte die GetCPUUsage
zurück gibt??? Die Frage ist, ist das so gewollt, oder doch noch ein
weiterer Fehler ???
Zu den Zeiten, wenn GetCPUUsage negative Werte zurückgibt, zeigen alle anderen Programme 0 an, dementsprechend runde ich die Werte auf Minimal 0 auf:
Delphi-Quellcode:
procedure TTestForm.TimerTimer(Sender: TObject);
var
  i: Integer;
  Last: Double;
begin
  CollectCPUData;
  MInfo.Lines.BeginUpdate;
  for i:=0 to GetCPUCount-1 do
  begin
    Last := GetCPUUsage(i)*100;
    if Last < 0 then Last := 0;

    if i=GetCPUCount-1 then //letzte CPU zeigt Durchschnitt (Gesamtlast)
      MInfo.Lines[i+1]:=Format('Durchschnitt: %5.2f%%', [Last])
    else
      MInfo.Lines[i+1]:=Format('CPU #%d: %5.2f%%', [i, Last]);
  end;
  MInfo.Lines.EndUpdate;
end;
Stefan
  Mit Zitat antworten Zitat
NooL

Registriert seit: 26. Okt 2008
Ort: Dreiländereck
15 Beiträge
 
Delphi 7 Professional
 
#6

AW: adCpuUsage.GetCPUCount bei XE2 64bit immer 0

  Alt 5. Jun 2013, 21:17
Okay, danke für die Rückinfo:
Zitat:
dementsprechend runde ich die Werte auf Minimal 0 auf
Dann werde ich es so ähnlich umsetzen. Besten Dank.
Nool
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz