Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5
  Alt 16. Jun 2002, 14:10
Moin Thomas,

ich hab's mal versucht

Code:
var
  iFreq       : int64;
  iCountStart : int64;
  iCountEnd   : int64;
  iDelta      : int64;
  iCountPerSec : int64;
  iCount833    : int64;

begin
  // INITIALISIERUNG
  QueryPerformanceFrequency(iFreq);
  QueryPerformanceCounter(iCountStart);
  QueryPerformanceCounter(iCountEnd);
  // Aufwand für den Aufruf ermitteln, um die Präzision zu erhöhen
  iDelta := iCountEnd-iCountStart;
  QueryPerformanceCounter(iCountStart);
  while true do
  begin
    QueryPerformanceCounter(iCountEnd);
    if ((iCountEnd-iCountStart-iDelta)/iFreq) >= 1 then
    begin
      iCountPerSec := (iCountEnd-iCountStart-iDelta);
      break;
    end;
  end;
  iCount833 := Round((iCountPerSec / 1000000) * 833);
  // INITIALISIERUNG ENDE
  // iCount833 enthält jetzt, so ca., die Anzahl der "Ticks" des
  // PerformanceCounters für 0,833 ms
  // iCount833, und iDelta müssen global zugänglich sein, und, sinnvoller Weise,
  // beim Programmstart initialisiert werden.
  // Wichtig: Der Wert ist Rechnerabhängig, kann also nicht einmal
  // Berechnet und als Konstante angegeben werden.

  // 0,833 ms warten
  QueryPerformanceCounter(iCountStart);
  while true do
  begin
    QueryPerformanceCounter(iCountEnd);
    if (iCountEnd-iCountStart-iDelta) >= iCount833 then
    begin
      break;
    end;
  end;
Ob's so wirklich einwandfrei funzt weiss ich leider nicht, aber ich denke mal, dass Du da eine Testmöglichkeit hast, wenn Du es schon so genau wissen willst
Einziges Problem: Der PerformanceCounter steht nicht auf jedem Rechner zur Verfügung.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat