Секундомер для Delphi 2007 - PullRequest
       10

Секундомер для Delphi 2007

0 голосов
/ 09 февраля 2012

Существует ли класс секундомера (предпочтительно с открытым исходным кодом), который предоставляет ту же услугу, что и Diagnostics.TStopwatch в Delphi XE?

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

JCLCounter от Project Jedi очень похож на TStopwatch.

2 голосов
/ 09 февраля 2012

Я понимаю, что это низкотехнологичный, но функция Win32 API GetTickCount работает достаточно хорошо для меня. На большинстве компьютеров разрешение составляет около 15-20 миллисекунд.

Я использую это так, без каких-либо классов, но вы можете легко написать свой собственный класс:

function TimerElapsed(tick1,tick2:DWORD):DWORD;
begin
  if ((tick2-tick1) < $80000000) then { timer roll-over check }
      result := (tick2 - tick1) { normal }
  else
      result := (not tick1)+tick2; {rollover calculation}
end;

function TimingDemo:Cardinal;
var 
  time1,time2:Cardinal;
begin
   time1 := GetTickCount;
   DoSomethingSlow;
   time2 := GetTickCount;
   result  :=  TimerElapsed(time1,time2); // return elapsed mSec.
end;
1 голос
/ 12 февраля 2012

Мои предпочтения относятся к этой ( TStopUhr ) реализации, найденной в Delphi Praxis forum.

Выдержка:

type
  TStopUhr = class
     private
       FStoppedTime : Int64;
       FStartValue : Int64;
       FStopValue : Int64;
       FStartTime : TDateTime;
       FStopTime : TDateTime;
       FMethode : TStopUhrMethode;
       FMethodeInUse : TStopUhrMethode;
     protected
       function GetStoppedTimeStr: String;
     public
       Constructor Create;
       Destructor Destroy; Override;
       procedure Start;
       procedure Stop;
       property StartTime : TDateTime read FStartTime;
       property StopTime : TDateTime read FStopTime;
       property StoppedTime : Int64 read FStoppedTime;
       property StoppedTimeStr : String read GetStoppedTimeStr;
       property MeasureMethode : TStopUhrMethode Read FMethode Write FMethode;
     end;

Пример использования:

var
   StopUhr : TStopUhr;
 begin
   StopUhr := TStopUhr.Create;
   StopUhr.MeasureMethode := su_TickCount; // default = su_DateTime
   StopUhr.Start;

  // zu messende Aufgabe

  StopUhr.Stop;
   ShowMessage(StopUhr.StoppedTimeStr);
   StopUhr.Free;
 end; 

Предоставляет функциональность, аналогичную той, которую RRUZ рекомендовал в ветке комментариев вопроса.

...