[Lazarus] TTimer simple issue

Santiago A. svaa at ciberpiula.net
Tue Oct 27 13:27:49 CET 2020


El 18/10/2020 a las 19:18, Lars via lazarus escribió:
> When building a simple TTimer demo I cannot seem to get it working
>
> Any idea what the problem could be if you paste this code into your 
> form with a memo?
>
> var
>   TimeSpent: integer;
>
> procedure TForm2.Button1Click(Sender: TObject);
> var
>   i, answer: integer;
> begin
>   Timer1.enabled := false;
>   TimeSpent := 0;
>   Timer1.Enabled := true;
>   Timer1.interval := 1;
>   for i := 0 to 999999999 do
>   begin
>     answer := i * answer;
>   end;
>
>   memo1.lines.add('time spent: ' + inttostr(timespent));
>
> end;
>
> procedure TForm2.Timer1Timer(Sender: TObject);
> begin
>   inc(TimeSpent);
> end;
>
> It says
> time spent: 0
> Whereas the time should be a lot.
>
> Regards,
> Lars

I don't know what are you trying to do, but if you are trying to find 
out how long it takes certain process, you should try other approach. 
Timer is low precision and it is only fired by events, so you must 
process event's queue.

A first and bad approach:

for i := 0 to 999999999 do
begin
    answer := i * answer;
    application.processmessages; //<-- process event queue
end;

But this is very not a very efficient way. The best is to get the start 
time, get the end time and subtract.

var
   StartTime,EndTime:TDataTime;
   i, answer: integer;
begin
  StartTime:=now;
  for i := 0 to 999999999 do
  begin
     answer := i * answer;
  end;
  EndTime:=now;
  memo1.lines.add('time spent: ' + TimeToStr(EndTime-StarTime) );
end;

But TDateTime is not accurate at all if you are measuring short periods 
(milliseconds).

EpikTimer is a component with much better precision.

https://wiki.lazarus.freepascal.org/EpikTimer


-- 
Saludos

Santiago A.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20201027/4b68677b/attachment.html>


More information about the lazarus mailing list