[Lazarus] Portable way to get accurate timestamps?

Bo Berglund bo.berglund at gmail.com
Mon Feb 21 07:23:54 CET 2011


On Sun, 20 Feb 2011 22:16:25 -0500, waldo kitty
<wkitty42 at windstream.net> wrote:

>On 2/20/2011 08:46, Luca Olivetti wrote:
>> Al 20/02/11 12:42, En/na Bo Berglund ha escrit:
>>
>>> I wonder if GetTickCount will get me a better value to milliseconds
>>> than Now()?
>>
>> Not under linux:
>>
>> function GetTickCount: DWord;
>> begin
>>    Result := DWord(Trunc(Now * 24 * 60 * 60 * 1000));
>> end;
>
>i gotta ask... is that even accurate? what are those "ticks" that are being 
>counted? by the above, they surely do not appear to be the machine's actual 
>clock timer ticks... can those even be accessed in today's world or do we really 
>need to revert some things like this back to the DOS world???

This is a Delphi wrapped API call in Windows that returns the number
of milliseconds since Windows started. I had the impression that they
were at least locked to the PC clock somehow and actually gave a
millisecond resolution, but now I believe that the "counter" is in
fact working in a different way than one would believe by the name.

When I run a test against a fairly accurate GPS time source I see that
there is an uncertainty of about 16 ms in the time given such that if
GetTickCount is executed at exactly 1 second intervals the last two
digits of the value is not the same as it should be.
Instead it slowly (over a period of 16 seconds) reduces by 16 ms and
then suddenly restores to a max value.
It is like a superimposed sawtooth with an amplitude of 16 ms.

The posted variation is apparently a Linux platform compatible version
that returns a millisecond value the same way as the Windows version
does, since there is no Windows GetTickCount API call in Linux.

I used this also on Windows in my tests and then the value does not
exhibit the sawtooth anymore. So I assume that Now() gets its time
from another source than the timer counter driving GetTickCount and
this is more accurate.


-- 
Bo Berglund
Developer in Sweden





More information about the Lazarus mailing list