AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte CPUiD 3.0 - Ein kleines System - Diagnoseprogramm
Thema durchsuchen
Ansicht
Themen-Optionen

CPUiD 3.0 - Ein kleines System - Diagnoseprogramm

Ein Thema von Daniel G · begonnen am 15. Jul 2005 · letzter Beitrag vom 12. Jun 2008
 
Daniel G
(Gast)

n/a Beiträge
 
#11

Re: CPUiD 2.0.1 - Ein kleines CPU - Diagnoseprogramm

  Alt 3. Jan 2006, 11:56
@ Ghostwalker & Thebe: Danke für eure Dateien, ich arbeite jetzt tatsächlich an einer kompletten Neuauflage. Diesmal übrigens mit der VCL.

@All: Die Sache mit der Geschwindigkeit geht mir nicht mehr aus dem Kopf. Ich benutze folgenden Code, allerdings nicht selbst geschrieben:

Delphi-Quellcode:
//Helping Function for "GetCPUSpeed"
function ActivateTimer: Int64;
asm
   push   eax
   push    edx
   db      0fh
   db      31h
   mov      [esp], eax
   mov      [esp+4], edx
   pop      eax
   pop      edx
end;

// From "CPUID for Delphi" by Ural Gunaydin
function GetCpuSpeed(msTime: DWORD): Double;
var
   llStart, llStop: Int64;
   dwStart: DWORD;
   timecaps: TTimeCaps;
   bf1, bf2, minErr, tErr,
   ratio, bestRatio, bestBf: Double;
begin
   result:= 0.0;
   if (timeGetDevCaps(@timecaps, sizeof(TTimeCaps)) <> TIMERR_NOERROR) then
   Exit;

   timeBeginPeriod(timecaps.wPeriodMax);
   dwStart:= timeGetTime;
   llStart:= ActivateTimer;
   while ((timeGetTime() - dwStart) < msTime) do
   begin
      //
   end;
   llStop:= ActivateTimer;
   timeEndPeriod(timecaps.wPeriodMax);
   result:= (llStop - llStart) / msTime;

   bf1:= 1000*50.00000;
   bf2:= 1000*66.66666;
   minErr:= result;

   ratio:= Round(result / bf1);
   bestRatio:= ratio;
   bestBf:= bf1;
   tErr:= (ratio * bf1) - result;
   if (tErr < minErr) then
   begin
      minErr:= tErr;
      bestRatio:= ratio;
      bestBf:= bf1;
   end;
   ratio:= ratio-1;
   tErr:= result - (ratio * bf1);
   if (tErr < minErr) then
   begin
      minErr:= tErr;
      bestRatio:= ratio;
      bestBf:= bf1;
   end;
   ratio:= Round(result / bf2);
   tErr:= (ratio * bf2) - result;
   if (tErr < minErr) then
   begin
      minErr:= tErr;
      bestRatio:= ratio;
      bestBf:= bf2;
   end;
   ratio:= ratio-1;
   tErr:= result - (ratio * bf2);
   if (tErr < minErr) then
   begin
      bestRatio:= ratio;
      bestBf:= bf2;
   end;
   result:= bestRatio * bestBf;
   //CpuInfo.CPUFreq:= result;
end;
Aufgerufen wird er mit:

something := Format('%.2f MHz', [GetCpuSpeed(1000) / 1000]); Erkennt ihr irgendeinen Stolperstein?
  Mit Zitat antworten Zitat
 


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 04:34 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