[Win32] Use GetSystemTimeAsFileTime() instead of time() and
authorTor Lillqvist <tml@novell.com>
Tue, 29 Mar 2005 08:24:48 +0000 (08:24 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Tue, 29 Mar 2005 08:24:48 +0000 (08:24 +0000)
2005-03-29  Tor Lillqvist  <tml@novell.com>

* glib/gmain.c (g_get_current_time): [Win32] Use
GetSystemTimeAsFileTime() instead of time() and
GetTickCount(). Much simpler.

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

index 13be51d197d8bcad512471fd452841da204b332e..12dc208caa46961074984b2492d9226d81455eb7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,13 @@
 2005-03-29  Tor Lillqvist  <tml@novell.com>
 
-       * glib/gmain.c (g_poll): If the event fired, assign
+       * glib/gmain.c (g_poll): [Win32] If the event fired, assign
        f->revents=f->events. We can't know whether the upper layer using
        the event actually is readable, writeable or what, so say that all
        the conditions hold. Remove the ResetEvent() call that has been
        ifdeffed out anyway for a long time. Remove an "#ifdef 1" and
        #endif pair of lines, that code is not optional.
+       (g_get_current_time): [Win32] Use GetSystemTimeAsFileTime()
+       instead of time() and GetTickCount(). Much simpler.
 
 2005-03-28  Matthias Clasen  <mclasen@redhat.com>
 
index 13be51d197d8bcad512471fd452841da204b332e..12dc208caa46961074984b2492d9226d81455eb7 100644 (file)
@@ -1,11 +1,13 @@
 2005-03-29  Tor Lillqvist  <tml@novell.com>
 
-       * glib/gmain.c (g_poll): If the event fired, assign
+       * glib/gmain.c (g_poll): [Win32] If the event fired, assign
        f->revents=f->events. We can't know whether the upper layer using
        the event actually is readable, writeable or what, so say that all
        the conditions hold. Remove the ResetEvent() call that has been
        ifdeffed out anyway for a long time. Remove an "#ifdef 1" and
        #endif pair of lines, that code is not optional.
+       (g_get_current_time): [Win32] Use GetSystemTimeAsFileTime()
+       instead of time() and GetTickCount(). Much simpler.
 
 2005-03-28  Matthias Clasen  <mclasen@redhat.com>
 
index 13be51d197d8bcad512471fd452841da204b332e..12dc208caa46961074984b2492d9226d81455eb7 100644 (file)
@@ -1,11 +1,13 @@
 2005-03-29  Tor Lillqvist  <tml@novell.com>
 
-       * glib/gmain.c (g_poll): If the event fired, assign
+       * glib/gmain.c (g_poll): [Win32] If the event fired, assign
        f->revents=f->events. We can't know whether the upper layer using
        the event actually is readable, writeable or what, so say that all
        the conditions hold. Remove the ResetEvent() call that has been
        ifdeffed out anyway for a long time. Remove an "#ifdef 1" and
        #endif pair of lines, that code is not optional.
+       (g_get_current_time): [Win32] Use GetSystemTimeAsFileTime()
+       instead of time() and GetTickCount(). Much simpler.
 
 2005-03-28  Matthias Clasen  <mclasen@redhat.com>
 
index 13be51d197d8bcad512471fd452841da204b332e..12dc208caa46961074984b2492d9226d81455eb7 100644 (file)
@@ -1,11 +1,13 @@
 2005-03-29  Tor Lillqvist  <tml@novell.com>
 
-       * glib/gmain.c (g_poll): If the event fired, assign
+       * glib/gmain.c (g_poll): [Win32] If the event fired, assign
        f->revents=f->events. We can't know whether the upper layer using
        the event actually is readable, writeable or what, so say that all
        the conditions hold. Remove the ResetEvent() call that has been
        ifdeffed out anyway for a long time. Remove an "#ifdef 1" and
        #endif pair of lines, that code is not optional.
+       (g_get_current_time): [Win32] Use GetSystemTimeAsFileTime()
+       instead of time() and GetTickCount(). Much simpler.
 
 2005-03-28  Matthias Clasen  <mclasen@redhat.com>
 
index 73d7f7c4cacc8a9502a15fe2d738afebb7e08582..4cc320b60dbe1ed25506b4c07391e15664ea826a 100644 (file)
@@ -1689,26 +1689,19 @@ g_get_current_time (GTimeVal *result)
   result->tv_sec = r.tv_sec;
   result->tv_usec = r.tv_usec;
 #else
-  /* Avoid calling time() except for the first time.
-   * GetTickCount() should be pretty fast and low-level?
-   * I could also use ftime() but it seems unnecessarily overheady.
-   */
-  static DWORD start_tick = 0;
-  static time_t start_time;
-  DWORD tick;
+  FILETIME ft;
+  guint64 *time64 = (guint64 *) &ft;
 
-  g_return_if_fail (result != NULL);
-  if (start_tick == 0)
-    {
-      start_tick = GetTickCount ();
-      time (&start_time);
-    }
+  GetSystemTimeAsFileTime (&ft);
 
-  tick = GetTickCount ();
+  /* Convert from 100s of nanoseconds since 1601-01-01
+   * to Unix epoch. Yes, this is Y2038 unsafe.
+   */
+  *time64 -= G_GINT64_CONSTANT (116444736000000000);
+  *time64 /= 10;
 
-  result->tv_sec = (tick - start_tick) / 1000 + start_time;
-  result->tv_usec = ((tick - start_tick) % 1000) * 1000;
+  result->tv_sec = *time64 / 1000000;
+  result->tv_usec = *time64 % 1000000;
 #endif
 }