--- a/Win32OperatingSystem.st Tue Jun 26 17:23:07 2018 +0200
+++ b/Win32OperatingSystem.st Tue Jun 26 17:32:15 2018 +0200
@@ -11433,9 +11433,31 @@
%{
FILETIME fileTime;
+#ifdef OLD
GetSystemTimeAsFileTime(&fileTime);
-// This will be available starting with Windows 8
-// GetSystemTimePreciseAsFileTime(&fileTime);
+#else
+ // starting with Windows 8, this:
+ // GetSystemTimePreciseAsFileTime(&fileTime);
+ // is better.
+ {
+ typedef VOID (WINAPI *P_GetSystemTimePreciseAsFileTime)(LPFILETIME);
+ static P_GetSystemTimePreciseAsFileTime pGetSystemTimePreciseAsFileTime = NULL;
+
+ if (pGetSystemTimePreciseAsFileTime == NULL) {
+ pGetSystemTimePreciseAsFileTime =
+ (P_GetSystemTimePreciseAsFileTime)
+ GetProcAddress ( GetModuleHandle ("kernel32.dll"),
+ "GetSystemTimePreciseAsFileTime");
+
+ if (pGetSystemTimePreciseAsFileTime == NULL) {
+ "/ use low resolution fallback
+ pGetSystemTimePreciseAsFileTime = GetSystemTimeAsFileTime;
+ }
+ }
+
+ (*pGetSystemTimePreciseAsFileTime)(&fileTime);
+ }
+#endif
nanosecondTime = FileTimeToNanosecondTime1970(&fileTime);
%}.
"/ rebias to 1970 by subtracting the number of millis from 1.1.1601 to 1.1.1970