X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/7b8a26e75924ecff47d3e347eb4e2685656c728e..ac385c745f6e299bea549eb2006b803e3885c916:/btime.pas?ds=inline

diff --git a/btime.pas b/btime.pas
index 8218e64..46cdf48 100644
--- a/btime.pas
+++ b/btime.pas
@@ -12,6 +12,9 @@ unit btime;
 {$ifdef fpc}
   {$mode delphi}
 {$endif}
+
+{$include lcoreconfig.inc}
+
 interface
 
 {$ifdef mswindows}
@@ -33,6 +36,7 @@ var
   tickcount:integer;
   settimebias:tunixtimeint;
   performancecountfreq:extended;
+  btimenowin8:boolean;
 
 function irctimefloat:float;
 function irctimeint:tunixtimeint;
@@ -57,6 +61,9 @@ function timestrshort(i:tunixtimeint):string;    // Wed Aug 15 16:21:09 2012
 function timestriso(i:tunixtimeint):string;      // 2012-08-15 16:21:09
 function timestrisoutc(i:float):string;          // 2012-08-15T14:21:09.255553Z
 
+procedure beginhightimerrate;
+procedure endhightimerrate;
+
 {$ifdef mswindows}
 function unixtimefloat_systemtime:float;
 {$endif}
@@ -592,10 +599,12 @@ const
 var
   f,g,h:float;
 begin
-  if not win8inited then initwin8;
-  if assigned(@GetSystemTimePreciseAsFileTime) then begin
-    result := unixtimefloat_win8;
-    exit;
+  if not btimenowin8 then begin
+    if not win8inited then initwin8;
+    if assigned(@GetSystemTimePreciseAsFileTime) then begin
+      result := unixtimefloat_win8;
+      exit;
+    end;  
   end;
 
   result := monotimefloat+timefloatbias;
@@ -762,10 +771,19 @@ begin
 
 end;
 
+procedure beginhightimerrate;
+begin
+  {$ifdef mswindows}timebeginperiod(1);{$endif}
+end;
+
+procedure endhightimerrate;
+begin
+  {$ifdef mswindows}timeendperiod(1);{$endif}
+end;
 
 procedure init;
 begin
-  {$ifdef mswindows}timebeginperiod(1);{$endif} //ensure stable unchanging clock
+  {$ifdef btimehighrate}beginhightimerrate;{$endif}
   fillchar(mmtime_driftavg,sizeof(mmtime_driftavg),0);
   settimebias := 0;
   gettimezone;