home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Share Gallery 1
/
share_gal_1.zip
/
share_gal_1
/
LA
/
LA018.ZIP
/
STRG55.ARC
/
RATE55.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1990-01-02
|
4KB
|
112 lines
{ =========================================================================== }
{ Rate55.pas - Rate timer using only low memory clock. ver 5.5, 12-01-89 }
{ }
{ This rate timer is a highly accurate timer based on the low memory clock. }
{ It is device independent by not accessing any special timer hardware and }
{ does not use any interrupts. Accuracy is +-1 repetition. }
{ }
{ This timer is great for timing short events (1 microsecond to .1 second) to }
{ get a Reps-per-second result. The secret to such great accuracy is keying }
{ in on the fact that the low memory clock is very accurate and on schedule }
{ every time it ticks. So, just make the event work by the clock rather than }
{ vice-versa. }
{ }
{ The timer is set for a 1 second test. If you can't get enough repetitions }
{ (>100) to get any resolution, you are free to change TestTime up to 3600 }
{ seconds. }
{ }
{ The timer even accounts for the overhead of the timer itself and any other }
{ overhead that is a part of your event. Just insert your code and go. You }
{ may experience a litter jitter while running in the integrated environment, }
{ but is solid when run as an executable file. }
{ Public Domain by James H. LeMay, Eagle Performance Software }
{ =========================================================================== }
{$A+,B-,D+,E+,F-,I-,L+,N+,O-,R-,S-,V-}
program RateTimer;
uses
Crt,Strg;
const
TestTime = 1; { seconds }
TicksPerDay = 1573040.0; { DOS timer ticks/day. }
TicksPerSec = TicksPerDay/86400.0;
var
LowClock: word absolute $0000:$046C;
Tick1,Ticks: word;
Reps,OverheadReps: longint;
RepsPerSec,TickFactor: real;
R: real absolute RepsPerSec; { Variable name is easier to Watch }
{ -- Place your variables here: -- }
S1,S2: string;
b: byte;
procedure WaitForTick;
begin
Tick1 := LowClock;
repeat
until LowClock<>Tick1;
Tick1 := LowClock;
end;
procedure RunTime (Seconds: word);
begin
if Seconds>3600
then Seconds:=3600;
Ticks := trunc(Seconds*TicksPerSec);
TickFactor := Seconds*TicksPerSec/Ticks; { Accounts for trunc of seconds }
WaitForTick;
end;
procedure Init;
begin
{ ** Initialize any of your variables here: ** }
S1 := 'Now is the time to check out Eagle Performance Software Products'+
'for speed tests';
S2 := S1;
end;
procedure ResetVariables;
begin
{ ** Place any variables that need to be reset after each test here: ** }
{ StrMove (S2,S1); }
end;
procedure Test;
begin
Reps := 0;
RunTime (TestTime);
repeat
{ ** Insert your test routine here ** }
b := StrPosL (S1,'speed',1);
{ ** End of test routine ** }
ResetVariables;
inc (Reps);
until LowClock-Tick1>=Ticks;
end;
procedure OverHead;
begin
OverHeadReps := 0;
RunTime (TestTime);
repeat
ResetVariables;
inc (OverHeadReps);
until LowClock-Tick1>=Ticks;
end;
procedure CalcRate;
begin
RepsPerSec := TickFactor/((TestTime)*(1.0/Reps-1.0/OverHeadReps));
WriteLn ('Strings/sec = ',RepsPerSec:8:0);
end;
begin
Init;
Test;
OverHead;
CalcRate;
end.