[Lazarus] TTimer simple issue
Darius Blaszyk
dhkblaszyk at gmail.com
Tue Oct 27 14:40:27 CET 2020
The first multiplication is when i = 0, so it should be ok. I am wondering
though, the OP wants to calculate the factorial of 999999999. That would
require a larger data type than an integer to store the result in! ;)
On Tue, Oct 27, 2020 at 1:46 PM Евгений Кадисов via lazarus <
lazarus at lists.lazarus-ide.org> wrote:
> The problem of your code is that the variable <answer> is not
> initialized.
> Regards
> Evgueny
>
> вт, 27 окт. 2020 г. в 15:28, Santiago A. via lazarus <
> lazarus at lists.lazarus-ide.org>:
>
>> 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.
>>
>> --
>> _______________________________________________
>> lazarus mailing list
>> lazarus at lists.lazarus-ide.org
>> https://lists.lazarus-ide.org/listinfo/lazarus
>>
> --
> _______________________________________________
> lazarus mailing list
> lazarus at lists.lazarus-ide.org
> https://lists.lazarus-ide.org/listinfo/lazarus
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20201027/e6dc8fc7/attachment-0001.html>
More information about the lazarus
mailing list