allow opt out of win8 api method for program that needs old method
[lcore.git] / btime.pas
index ff77de9e8a681a23ae3292c8a604981fe4a3ca93..46cdf48a74189538993306a5985bd3fa7fa996c2 100644 (file)
--- a/btime.pas
+++ b/btime.pas
@@ -9,6 +9,11 @@ works on windows/delphi, and on freepascal on unix.
 \r
 \r
 unit btime;\r
+{$ifdef fpc}\r
+  {$mode delphi}\r
+{$endif}\r
+\r
+{$include lcoreconfig.inc}\r
 \r
 interface\r
 \r
@@ -31,6 +36,7 @@ var
   tickcount:integer;\r
   settimebias:tunixtimeint;\r
   performancecountfreq:extended;\r
+  btimenowin8:boolean;\r
 \r
 function irctimefloat:float;\r
 function irctimeint:tunixtimeint;\r
@@ -55,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\r
 function timestrisoutc(i:float):string;          // 2012-08-15T14:21:09.255553Z\r
 \r
+procedure beginhightimerrate;\r
+procedure endhightimerrate;\r
+\r
 {$ifdef mswindows}\r
 function unixtimefloat_systemtime:float;\r
 {$endif}\r
@@ -105,9 +114,7 @@ var
 \r
 implementation\r
 \r
-{$ifdef fpc}\r
-  {$mode delphi}\r
-{$endif}\r
+\r
 \r
 uses\r
   {$ifdef UNIX}\r
@@ -592,10 +599,12 @@ const
 var\r
   f,g,h:float;\r
 begin\r
-  if not win8inited then initwin8;\r
-  if assigned(@GetSystemTimePreciseAsFileTime) then begin\r
-    result := unixtimefloat_win8;\r
-    exit;\r
+  if not btimenowin8 then begin\r
+    if not win8inited then initwin8;\r
+    if assigned(@GetSystemTimePreciseAsFileTime) then begin\r
+      result := unixtimefloat_win8;\r
+      exit;\r
+    end;  \r
   end;\r
 \r
   result := monotimefloat+timefloatbias;\r
@@ -762,10 +771,19 @@ begin
 \r
 end;\r
 \r
+procedure beginhightimerrate;\r
+begin\r
+  {$ifdef mswindows}timebeginperiod(1);{$endif}\r
+end;\r
+\r
+procedure endhightimerrate;\r
+begin\r
+  {$ifdef mswindows}timeendperiod(1);{$endif}\r
+end;\r
 \r
 procedure init;\r
 begin\r
-  {$ifdef mswindows}timebeginperiod(1);{$endif} //ensure stable unchanging clock\r
+  {$ifdef btimehighrate}beginhightimerrate;{$endif}\r
   fillchar(mmtime_driftavg,sizeof(mmtime_driftavg),0);\r
   settimebias := 0;\r
   gettimezone;\r