X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/9763940f8849e5c807566157829a1e6d2c9172ee..803cf6668d9e89c244e5fbc7f996a460470338dd:/ltimevalstuff.pas?ds=sidebyside diff --git a/ltimevalstuff.pas b/ltimevalstuff.pas index 7054ea9..da8bb94 100644 --- a/ltimevalstuff.pas +++ b/ltimevalstuff.pas @@ -10,17 +10,28 @@ unit ltimevalstuff; interface + +{$ifdef CONDITIONALEXPRESSIONS}{$define support_int64}{$endif} //delphi 6 or later +{$ifdef fpc}{$define support_int64}{$endif} + {$ifdef mswindows} type ttimeval = record - tv_sec : longint; - tv_usec : longint; + {$IFDEF support_int64} + tv_sec : int64; + {$ELSE} + tv_sec : longint; + {$ENDIF} + tv_usec : longint; end; {$else} {$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 +41,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 +91,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.