X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/03b75b4c964d8b3ac97d4007f0e033549b01c92f..2ba734680253339d8b27208a1dfec5e2f220f3d8:/ltimevalstuff.pas?ds=inline diff --git a/ltimevalstuff.pas b/ltimevalstuff.pas index 5e81933..7a10c7a 100644 --- a/ltimevalstuff.pas +++ b/ltimevalstuff.pas @@ -20,16 +20,24 @@ 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} procedure tv_add(var tv:ttimeval;msec:integer); function tv_compare(const tv1,tv2:ttimeval):boolean; -procedure tv_substract(var tv:ttimeval;const tv2:ttimeval); +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. @@ -59,7 +67,7 @@ begin end else result := tv1.tv_sec > tv2.tv_sec; end; -procedure tv_substract(var tv:ttimeval;const tv2:ttimeval); +procedure tv_subtract(var tv:ttimeval;const tv2:ttimeval); begin dec(tv.tv_usec,tv2.tv_usec); if tv.tv_usec < 0 then begin @@ -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.