compile on 64 bits delphi
[lcore.git] / btime.pas
index 8218e6415a97bf63f25a278f6c75ceb0ad95280c..46cdf48a74189538993306a5985bd3fa7fa996c2 100644 (file)
--- a/btime.pas
+++ b/btime.pas
@@ -12,6 +12,9 @@ unit btime;
 {$ifdef fpc}\r
   {$mode delphi}\r
 {$endif}\r
 {$ifdef fpc}\r
   {$mode delphi}\r
 {$endif}\r
+\r
+{$include lcoreconfig.inc}\r
+\r
 interface\r
 \r
 {$ifdef mswindows}\r
 interface\r
 \r
 {$ifdef mswindows}\r
@@ -33,6 +36,7 @@ var
   tickcount:integer;\r
   settimebias:tunixtimeint;\r
   performancecountfreq:extended;\r
   tickcount:integer;\r
   settimebias:tunixtimeint;\r
   performancecountfreq:extended;\r
+  btimenowin8:boolean;\r
 \r
 function irctimefloat:float;\r
 function irctimeint:tunixtimeint;\r
 \r
 function irctimefloat:float;\r
 function irctimeint:tunixtimeint;\r
@@ -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\r
 function timestrisoutc(i:float):string;          // 2012-08-15T14:21:09.255553Z\r
 \r
 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
 {$ifdef mswindows}\r
 function unixtimefloat_systemtime:float;\r
 {$endif}\r
@@ -592,10 +599,12 @@ const
 var\r
   f,g,h:float;\r
 begin\r
 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
   end;\r
 \r
   result := monotimefloat+timefloatbias;\r
@@ -762,10 +771,19 @@ begin
 \r
 end;\r
 \r
 \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
 \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
   fillchar(mmtime_driftavg,sizeof(mmtime_driftavg),0);\r
   settimebias := 0;\r
   gettimezone;\r