AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Aktuelle CPUFrequenz abfragen (SpeedStep)

Aktuelle CPUFrequenz abfragen (SpeedStep)

Ein Thema von DelTurbo · begonnen am 10. Nov 2015 · letzter Beitrag vom 15. Nov 2015
Antwort Antwort
Seite 1 von 2  1 2   
Perlsau
(Gast)

n/a Beiträge
 
#1

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 18:56
Keine Ahnung, ob das hilft, aber ich verwende in Win7 das Gadget CPU-Meter, das mir die Auslastung aller Kerne sowie den verwendeten RAM anzeigt. Ob die Anzeige dieses Gadgets korrekt ist, vermag ich nicht wirklich zu beurteilen. Zumindest stimmt die Gadget-Anzeige in etwa mit der Anzeige im Ressourcenmonitor überein.

Immerhin zeigt die Existenz dieses Gadgets, daß es irgendwie gehen muß
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#2

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 19:08
Eine ganz simple Variante ist, die Klasse Win32_Processor via WMI zu befragen (Class property CurrentClockSpeed). Aber wie bereits richtig gesagt wurde, gibt das nur den Takt eines Kerns an, der nicht notwendigerweise mit dem Takt der anderen Kerne übereinstimmen muss. Daher fällt das eher in die Kategorie "CPU-Frequenz auslesen für Arme" .

MfG Dalai
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#3

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 10. Nov 2015, 19:19
Die WMI-Funktion ist ohne Refresher nicht nutzbar.

Delphi-Quellcode:
// Version: 1.8.3.0
// LIABILITY DISCLAIMER
// THIS GENERATED CODE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED.
// YOU USE IT AT YOUR OWN RISK. THE AUTHOR NOT WILL BE LIABLE FOR DATA LOSS,
// DAMAGES AND LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS CODE.
//----------------------------------------------------------------------------------------------------
program GetWMI_Info;

{$APPTYPE CONSOLE}

uses
 // SysUtils, ActiveX, ComObj, Variants;
  System.SysUtils,
  Winapi.ActiveX,
  System.Win.ComObj,
  System.Variants;

const
  WbemUser =''; WbemPassword =''; WbemComputer ='localhost';
  wbemFlagForwardOnly = $00000020;

function VarToInt(const AVariant: Variant): INT64;// integer;
begin Result := StrToIntDef(Trim(VarToStr(AVariant)), 0); end;

procedure GetCIM_ProcessorInfo;
var
  FSWbemLocator : OLEVariant;
  FWMIService : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject : OLEVariant;
  oEnum : IEnumvariant;
  iValue : LongWord;
begin;
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM CIM_Processor','WQL',wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('AddressWidth %d',[VarToInt(FWbemObject.AddressWidth)]));// Uint16
    Writeln(Format('Availability %d',[VarToInt(FWbemObject.Availability)]));// Uint16
    Writeln(Format('Caption %s',[VarToStr(FWbemObject.Caption)]));// String
    Writeln(Format('ConfigManagerErrorCode %d',[VarToInt(FWbemObject.ConfigManagerErrorCode)]));// Uint32
    Writeln(Format('ConfigManagerUserConfig %s',[VarToStr(FWbemObject.ConfigManagerUserConfig)]));// Boolean
    Writeln(Format('CreationClassName %s',[VarToStr(FWbemObject.CreationClassName)]));// String
    Writeln(Format('CurrentClockSpeed %d',[VarToInt(FWbemObject.CurrentClockSpeed)]));// Uint32
    Writeln(Format('DataWidth %d',[VarToInt(FWbemObject.DataWidth)]));// Uint16
    Writeln(Format('Description %s',[VarToStr(FWbemObject.Description)]));// String
    Writeln(Format('DeviceID %s',[VarToStr(FWbemObject.DeviceID)]));// String
    Writeln(Format('ErrorCleared %s',[VarToStr(FWbemObject.ErrorCleared)]));// Boolean
    Writeln(Format('ErrorDescription %s',[VarToStr(FWbemObject.ErrorDescription)]));// String
    Writeln(Format('Family %d',[VarToInt(FWbemObject.Family)]));// Uint16
    Writeln(Format('InstallDate %s',[VarToStr(FWbemObject.InstallDate)]));// Datetime
    Writeln(Format('LastErrorCode %d',[VarToInt(FWbemObject.LastErrorCode)]));// Uint32
    Writeln(Format('LoadPercentage %d',[VarToInt(FWbemObject.LoadPercentage)]));// Uint16
    Writeln(Format('MaxClockSpeed %d',[VarToInt(FWbemObject.MaxClockSpeed)]));// Uint32
    Writeln(Format('Name %s',[VarToStr(FWbemObject.Name)]));// String
    Writeln(Format('OtherFamilyDescription %s',[VarToStr(FWbemObject.OtherFamilyDescription)]));// String
    Writeln(Format('PNPDeviceID %s',[VarToStr(FWbemObject.PNPDeviceID)]));// String
    Writeln(Format('PowerManagementCapabilities %d',[VarToInt(FWbemObject.PowerManagementCapabilities)]));// Array of Uint16
    Writeln(Format('PowerManagementSupported %s',[VarToStr(FWbemObject.PowerManagementSupported)]));// Boolean
    Writeln(Format('Role %s',[VarToStr(FWbemObject.Role)]));// String
    Writeln(Format('Status %s',[VarToStr(FWbemObject.Status)]));// String
    Writeln(Format('StatusInfo %d',[VarToInt(FWbemObject.StatusInfo)]));// Uint16
    Writeln(Format('Stepping %s',[VarToStr(FWbemObject.Stepping)]));// String
    Writeln(Format('SystemCreationClassName %s',[VarToStr(FWbemObject.SystemCreationClassName)]));// String
    Writeln(Format('SystemName %s',[VarToStr(FWbemObject.SystemName)]));// String
    Writeln(Format('UniqueId %s',[VarToStr(FWbemObject.UniqueId)]));// String
    Writeln(Format('UpgradeMethod %d',[VarToInt(FWbemObject.UpgradeMethod)]));// Uint16

    Writeln('');
    FWbemObject:=Unassigned;
  end;
end;


begin
 try
    CoInitialize(nil);
    try
      GetCIM_ProcessorInfo;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 Writeln('Press Enter to exit');
 Readln;
end.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#4

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 11. Nov 2015, 08:13
Ich glaube ihr verwechselt die Auslastung, die pro Kern anders ist, mit der CPU Clockspeed. Diese Frequenz ist, wenn man es mal platt sagt, Global. Es ist nicht möglich einen Kern mit 1Ghz und einen anderen Kern mit 2Ghz laufen zu lassen.

Dieser Speed wird aus einer Grundfrequenz mit einem Multiplier festgelegt bzw. eingestellt. Es würd ja schon reichen wenn man die Grundfrequenz und den Multiplier wert lesen könnte. Dann einfach mal nehmen und schon hat man den aktuellen Takt. Aber leider find ich rein Garnichts wie und wo ich das auslesen könnte. Es muss aber gehen da z.b. das Programm CoreTemp genau diese werte anzeigt.

Code:
Multiplikator: Der endgültige Takt des Prozessors ergeben sich aus dem Produkt des BCLK und des Multiplikators. Also in Kurzform: BCLKxMulti=CPU-Takt. Da der Multiplikator bei den meisten CPUs nach oben hin gesperrt ist, führt nur eine Erhöhung des BCLK den gewünschten Effekt der Taktsteigerung herbei.
 Bsp.: Jeder i7 hat einen BCLK 133MHz, der i7-920 hat den Multi 20
 133MHz * 20 = 2667MHz
Quelle: http://extreme.pcgameshardware.de/ov...cking.html#a06

Gruß

EDIT: Danke @hathor, das zeigt mir wirklich die Aktuelle Frequenz an. Ist zwar nicht schnell, aber gut brauchbar.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo (11. Nov 2015 um 08:24 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#5

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 11. Nov 2015, 09:27
@hathor,
ich habe gerade gemerkt, das CurrentClockSpeed nicht den TurboSpeed anzeigt. Er zeigt dann nur den MaxClockSpeed (4001) an. Hat eventuell jemand eine Idee wie ich das "richtig" angezeigt bekomme.

Ich habe es auf 2 verschiedenen Rechner getestet.

Danke im Voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 11. Nov 2015, 11:24
Mit VBS ist das einfach:

Code:
Set objWMI = GetObject("winmgmts://./root\cimv2")
set objRefresher = CreateObject("WbemScripting.Swbemrefresher")
Set objInterfaces = objRefresher.AddEnum(objWMI, "CIM_Processor").ObjectSet
Dim strList, I
Wscript.Echo "Click and Wait 10-15 sec ..."
    objRefresher.Refresh
    For each RefreshItem in objRefresher
        For each objInstance in RefreshItem.ObjectSet
        strList = strList & objInstance.Name _
      & vbnewline & " CurrentClockSpeed:  " & objInstance.CurrentClockSpeed _ 
      & vbnewline & " MaxClockSpeed:       " & objInstance.MaxClockSpeed
        Next
    Next
strList = strList & vbnewline & "--------------------------------"

For I = 1 to 10
    objRefresher.Refresh
    For each RefreshItem in objRefresher
        For each objInstance in RefreshItem.ObjectSet
        strList = strList & vbnewline & " CurrentClockSpeed:   " & objInstance.CurrentClockSpeed
        Next
    Next
    Wscript.Sleep 500
Next
Wscript.Echo strList
Angehängte Grafiken
Dateityp: jpg WSH_01.jpg (40,6 KB, 34x aufgerufen)
Angehängte Dateien
Dateityp: zip CIM_Processor-11.zip (496 Bytes, 15x aufgerufen)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#7

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 11. Nov 2015, 11:33
Das zeigt auch nur die Grundtaktfrequenz des Prozessors. Turbo wären bei dem Prozessor 3,3.

Quelle: http://ark.intel.com/de/products/648...up-to-3_30-GHz
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#8

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 11. Nov 2015, 11:31
Ich glaube ihr verwechselt die Auslastung, die pro Kern anders ist, mit der CPU Clockspeed. Diese Frequenz ist, wenn man es mal platt sagt, Global. Es ist nicht möglich einen Kern mit 1Ghz und einen anderen Kern mit 2Ghz laufen zu lassen.
Doch, genau das passiert bei/mit aktuellen Prozessoren. Einfach mal CPU-Z laufen lassen und nur einen Kern auslasten* und schon wirst du bei z.B. einem AMD K10 (z.B. Athlon II) sehen, dass die Taktung pro Kern anders ist. Wenn der eine Kern voll ausgelastet ist, geht der Takt auf Maximum auf diesem Kern, und wenn die anderen Kerne nicht belastet sind, dann bleiben die bei ihrem Minimaltakt.

Hierzu kann man z.B. einen Benchmark laufen lassen und dessen Prozess via Taskmanager auf einen Kern festnageln.

MfG Dalai
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 11. Nov 2015, 13:02
Ich glaube ihr verwechselt die Auslastung, die pro Kern anders ist, mit der CPU Clockspeed.
In der Tat: Diese Verwechslung gebe ich ganz offen zu ...nichts für ungut, Ausreden hab ich jetzt grad keine parat, sorry
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#10

AW: Aktuelle CPUFrequenz abfragen (SpeedStep)

  Alt 11. Nov 2015, 13:08
Pfff, irren ist Menschlich. Sonst gäbe es keine Radiergummis
Was meinst du wie oft ich mich schon geirrt habe.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:03 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