X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/9763940f8849e5c807566157829a1e6d2c9172ee..a77cd534c22418ec9a8a22ae42efef1a9500b193:/ltimevalstuff.pas?ds=inline diff --git a/ltimevalstuff.pas b/ltimevalstuff.pas index 7054ea9..7a10c7a 100644 --- a/ltimevalstuff.pas +++ b/ltimevalstuff.pas @@ -20,7 +20,10 @@ interface {$ifdef ver1_0} uses linux; {$else} - uses baseunix,unix,unixutil,sockets; + uses + {$ifdef linux}linux,{$endif} //for clock_gettime + {$ifdef freebsd}freebsd,{$endif} //for clock_gettime + baseunix,unix,unixutil,sockets; {$endif} {$endif} @@ -30,6 +33,11 @@ function tv_compare(const tv1,tv2:ttimeval):boolean; procedure tv_subtract(var tv:ttimeval;const tv2:ttimeval); procedure msectotimeval(var tv:ttimeval;msec:integer); +{$ifdef unix} +//for internal use by lcore as a replacement for gettimeofday -beware +procedure gettimemonotonic(var tv:ttimeval); +{$endif} + //tv_invalidtimebig will always compare as greater than any valid timeval //unfortunately unixstuff.inc hasn't worked it's magic yet so we //have to ifdef this manually. @@ -75,4 +83,24 @@ begin tv.tv_usec := (msec mod 1000)*1000; end; -end. \ No newline at end of file + +{$ifdef unix} +{$ifdef linux}{$define have_clock_gettime}{$endif} +{$ifdef freebsd}{$define have_clock_gettime}{$endif} + +procedure gettimemonotonic(var tv:ttimeval); +var + ts:ttimespec; +begin + {$ifdef have_clock_gettime} + if (clock_gettime(CLOCK_MONOTONIC, @ts) = 0) then begin + tv.tv_sec := ts.tv_sec; + tv.tv_usec := ts.tv_nsec div 1000; + exit; + end; + {$endif} + gettimeofday(tv); +end; +{$endif} + +end.