On Win32, use GetSystemTimeAsFileTime() instead of GetTickCount().
authorTor Lillqvist <tml@novell.com>
Sun, 20 Mar 2005 11:35:48 +0000 (11:35 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Sun, 20 Mar 2005 11:35:48 +0000 (11:35 +0000)
2005-03-20  Tor Lillqvist  <tml@novell.com>

* glib/gtimer.c: On Win32, use GetSystemTimeAsFileTime() instead
of GetTickCount(). (#159507)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-8
glib/gtimer.c

index 3ffe87d..ba9ecd7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2005-03-20  Tor Lillqvist  <tml@novell.com>
 
+       * glib/gtimer.c: On Win32, use GetSystemTimeAsFileTime() instead
+       of GetTickCount(). (#159507)
+
        * glib/gmessages.c (g_log_default_handler)
        * glib/gutils.c (g_get_prgname): Move the Win32 code that asks the
        program name from the system to g_get_prgname(). Do output the pid
index 3ffe87d..ba9ecd7 100644 (file)
@@ -1,5 +1,8 @@
 2005-03-20  Tor Lillqvist  <tml@novell.com>
 
+       * glib/gtimer.c: On Win32, use GetSystemTimeAsFileTime() instead
+       of GetTickCount(). (#159507)
+
        * glib/gmessages.c (g_log_default_handler)
        * glib/gutils.c (g_get_prgname): Move the Win32 code that asks the
        program name from the system to g_get_prgname(). Do output the pid
index 3ffe87d..ba9ecd7 100644 (file)
@@ -1,5 +1,8 @@
 2005-03-20  Tor Lillqvist  <tml@novell.com>
 
+       * glib/gtimer.c: On Win32, use GetSystemTimeAsFileTime() instead
+       of GetTickCount(). (#159507)
+
        * glib/gmessages.c (g_log_default_handler)
        * glib/gutils.c (g_get_prgname): Move the Win32 code that asks the
        program name from the system to g_get_prgname(). Do output the pid
index 3ffe87d..ba9ecd7 100644 (file)
@@ -1,5 +1,8 @@
 2005-03-20  Tor Lillqvist  <tml@novell.com>
 
+       * glib/gtimer.c: On Win32, use GetSystemTimeAsFileTime() instead
+       of GetTickCount(). (#159507)
+
        * glib/gmessages.c (g_log_default_handler)
        * glib/gutils.c (g_get_prgname): Move the Win32 code that asks the
        program name from the system to g_get_prgname(). Do output the pid
index 9b0e911..6a6a06e 100644 (file)
@@ -52,8 +52,8 @@
 struct _GTimer
 {
 #ifdef G_OS_WIN32
-  DWORD start;
-  DWORD end;
+  guint64 start;
+  guint64 end;
 #else /* !G_OS_WIN32 */
   struct timeval start;
   struct timeval end;
@@ -64,7 +64,7 @@ struct _GTimer
 
 #ifdef G_OS_WIN32
 #  define GETTIME(v) \
-     v = GetTickCount ()
+     GetSystemTimeAsFileTime ((FILETIME *)&v)
 #else /* !G_OS_WIN32 */
 #  define GETTIME(v) \
      gettimeofday (&v, NULL)
@@ -123,7 +123,7 @@ void
 g_timer_continue (GTimer *timer)
 {
 #ifdef G_OS_WIN32
-  DWORD elapsed;
+  guint64 elapsed;
 #else
   struct timeval elapsed;
 #endif /* G_OS_WIN32 */
@@ -176,7 +176,9 @@ g_timer_elapsed (GTimer *timer,
                 gulong *microseconds)
 {
   gdouble total;
-#ifndef G_OS_WIN32
+#ifdef G_OS_WIN32
+  gint64 elapsed;
+#else
   struct timeval elapsed;
 #endif /* G_OS_WIN32 */
 
@@ -184,23 +186,14 @@ g_timer_elapsed (GTimer *timer,
 
 #ifdef G_OS_WIN32
   if (timer->active)
-    timer->end = GetTickCount ();
+    GETTIME (timer->end);
 
-  /* Check for wraparound, which happens every 49.7 days. */
-  if (timer->end < timer->start)
-    total = (UINT_MAX - (timer->start - timer->end - 1)) / 1000.0;
-  else
-    total = (timer->end - timer->start) / 1000.0;
+  elapsed = timer->end - timer->start;
+
+  total = elapsed / 1e7;
 
   if (microseconds)
-    {
-      if (timer->end < timer->start)
-       *microseconds =
-         ((UINT_MAX - (timer->start - timer->end - 1)) % 1000) * 1000;
-      else
-       *microseconds =
-         ((timer->end - timer->start) % 1000) * 1000;
-    }
+    *microseconds = (elapsed / 10) % 1000000;
 #else /* !G_OS_WIN32 */
   if (timer->active)
     gettimeofday (&timer->end, NULL);