[Lazarus] Better implementation of GetTickcount using clock_gettime
Luca Olivetti
luca at wetron.es
Tue Apr 1 12:20:53 CEST 2014
I use GetTickCount a lot to keep track of timeouts.
On windows, it is guaranteed to be monotonic, so my usual
if GetTickCount-StartTime>Timeout then..
works fine (yes, even when the time wraps around, provided StartTime is
defined as DWORD and Timeout is smaller than a DWORD, of course I could
use GetTickCount64 but usually the 32bits version is enough).
For unix the implementation uses fpgettimeofday but that's not
monotonic, so it could break the above code.
For linux a more accurate implementation could be
function GetTickCount64: QWord;
var
tp: timespec;
begin
clock_gettime(CLOCK_MONOTONIC, @tp);
Result := (Int64(tp.tv_sec) * 1000) + (tp.tv_nsec div 1000000);
end;
And I say linux because CLOCK_MONOTONIC is only defined there in fpc,
though it should be available even in other systems:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_getres.html
Bye
--
Luca Olivetti
Wetron Automation Technology http://www.wetron.es
Tel. +34 935883004 Fax +34 935883007
More information about the Lazarus
mailing list