Lars wrote 36 lines
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