X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/03b75b4c964d8b3ac97d4007f0e033549b01c92f..a77cd534c22418ec9a8a22ae42efef1a9500b193:/ltimevalstuff.pas

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.