![]() |
CPU-FREQUENZMESSUNG
Liste der Anhänge anzeigen (Anzahl: 1)
CPU-FREQUENZMESSUNG
Was vor einigen Jahren noch ging (Startzeitpunkt festlegen Takte zählen, Endzeitpunkt festlegen), ist seit Einführung von Cool'n'Quiet (von AMD) und Speedstep (von INTEL) nicht mehr möglich. Die Frequenz-Messung dauert viel länger, als die CPU braucht, um 10-25 mal in der Sekunde den Takt zu ändern. WINDOWS bietet über die Funktionen in powrprof.dll die PROCESSOR_POWER_INFORMATION an. MAXIMALE FREQUENZ = MaxMhz REALE FREQUENZ = CurrentMhz Siehe Code:
Delphi-Quellcode:
Nachtrag:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; CPUFREQ1: TLabel; Label3: TLabel; CPUFREQ2: TLabel; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; N, CIS, MIS : Cardinal; const powrproflib = 'powrprof.dll'; type PROCESSOR_POWER_INFORMATION = packed record Number: Cardinal; MaxMhz: Cardinal; CurrentMhz: Cardinal; MhzLimit: Cardinal; MaxIdleState: Cardinal; CurrentIdleState: Cardinal; end; PPROCESSOR_POWER_INFORMATION = ^PROCESSOR_POWER_INFORMATION; TCPUFrequency = packed record CurrentMhz: Cardinal; MaxMhz: Cardinal; MhzLimit: Cardinal; end; var CPUFrequency: TCPUFrequency; implementation {$R *.dfm} function CallNtPowerInformation(InformationLevel: DWORD; InPutBuffer: Pointer; InputBufferSize: ULONG; OutPutBuffer: Pointer; OutPutBufferSize: ULONG): DWORD; stdcall; external powrproflib; function GetCPUFrequency(var CPUFrequency: TCPUFrequency): DWORD; var ppi: PROCESSOR_POWER_INFORMATION; err: DWORD; begin ZeroMemory(@ppi, sizeof(PROCESSOR_POWER_INFORMATION)); err := CallNTPowerInformation(11, nil, 0, @ppi, sizeof(PROCESSOR_POWER_INFORMATION)); if err = 0 then begin CPUFrequency.CurrentMhz := ppi.CurrentMhz; CPUFrequency.MaxMhz := ppi.MaxMhz; CPUFrequency.MhzLimit := ppi.MhzLimit; N:= ppi.Number; CIS:= ppi.CurrentIdleState; MIS:= ppi.MaxIdleState; end; result := err; end; function ReadFREQ : Boolean; var err: DWORD; begin ZeroMemory(@CPUFrequency, sizeof(TCPUFrequency)); err := GetCPUFrequency(CPUFrequency); if err = 0 then result:= true else result:= false; end; procedure TForm1.Timer1Timer(Sender: TObject); begin If ReadFREQ = true then BEGIN CPUFREQ1.Caption:= IntToStr(Round(CPUFrequency.CurrentMhz div 10 +1)* 10)+' MHz'; CPUFREQ2.Caption:= IntToStr(Round(CPUFrequency.MaxMhz div 10 +1)* 10)+' MHz'; END; end; end. Ein fast identischer Code ist hier: Author : Michael Puff (SORRY! Zu spät gefunden! ) ![]() Für die Suchfunktion: CPU-FREQUENZMESSUNG CPUFREQUENZMESSUNG CPUFREQUENZ CPUTAKT CPUCLOCK CPU CLOCK PROCESSOR CLOCK |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 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