Autor Beitrag
suga2001
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: So 06.07.08 16:32 
hallo, und zwar habe ich ein problem. ich muss eigentlich die Wege erklären können, wie ich Frequenzen auslesen und bestimmen kann. beim auslesen ist alles klar. nur wenn ich es anhand einer asm rountine machen soll, frag ich mich doch, was das alles für römische zeichen sind :idea:

ich soll 500 ms warten und in der zeit die takte messen
ASM-Routine

dw 310FH // Befehl:rdtsc :?: :?: :?: :?: :?: wie komme ich da bitte drauf?
mov Zeitlo,eax
mox ZeitHI,edx
END

am ende müsste ich doch eigentlich die takte durch die 500 ms rechen, oder nicht?



danke schon mal im voraus
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 06.07.08 18:57 
Titel: CPU-FREQUENZ
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:[meta]CPU-FREQUENZMESSUNG,CPUFREQUENZMESSUNG,CPUFREQUENZ,CPUTAKT,CPUCLOCK,CPU CLOCK,PROCESSOR CLOCK[/meta]

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
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; stdcallexternal powrproflib;

function GetCPUFrequency(var CPUFrequency: TCPUFrequency): DWORD;
var
  ppi: PROCESSOR_POWER_INFORMATION;
  err: DWORD;
begin
  ZeroMemory(@ppi, sizeof(PROCESSOR_POWER_INFORMATION));
  err := CallNTPowerInformation(11nil0, @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.


Nachtrag:
Ein fast identischer Code ist hier: Author : Michael Puff (SORRY! Zu spät gefunden! )
www.delphipraxis.net...owerinformation.html
Einloggen, um Attachments anzusehen!