[pypy-svn] r31404 - pypy/dist/pypy/module/rctime

rhymes at codespeak.net rhymes at codespeak.net
Sat Aug 19 15:59:18 CEST 2006


Author: rhymes
Date: Sat Aug 19 15:59:16 2006
New Revision: 31404

Modified:
   pypy/dist/pypy/module/rctime/interp_time.py
Log:
clock() for Windows

Modified: pypy/dist/pypy/module/rctime/interp_time.py
==============================================================================
--- pypy/dist/pypy/module/rctime/interp_time.py	(original)
+++ pypy/dist/pypy/module/rctime/interp_time.py	Sat Aug 19 15:59:16 2006
@@ -33,6 +33,7 @@
         ("tm_yday", c_int), ("tm_isdst", c_int), ("tm_gmtoff", c_long),
         ("tm_zone", c_char_p)])
 elif _WIN:
+    from ctypes import wintypes
     CConfig.tm = ctypes_platform.Struct("struct tm", [("tm_sec", c_int),
         ("tm_min", c_int), ("tm_hour", c_int), ("tm_mday", c_int),
         ("tm_mon", c_int), ("tm_year", c_int), ("tm_wday", c_int),
@@ -277,22 +278,22 @@
     if _POSIX:
         res = float(float(libc.clock()) / CLOCKS_PER_SEC)
         return space.wrap(res)
-    # elif _MS_WINDOWS:
-    #     divisor = 0.0
-    #     ctrStart = _LARGE_INTEGER()
-    #     now = _LARGE_INTEGER()
-    # 
-    #     if divisor == 0.0:
-    #         freq = _LARGE_INTEGER()
-    #         windll.kernel32.QueryPerformanceCounter(byref(ctrStart))
-    #         res = windll.kernel32.QueryPerformanceCounter(byref(freq))
-    #         if not res or freq.QuadPart == 0:
-    #             return float(windll.msvcrt.clock())
-    #         divisor = float(freq.QuadPart)
-    # 
-    #     windll.kernel32.QueryPerformanceCounter(byref(now))
-    #     diff = float(now.QuadPart - ctrStart.QuadPart)
-    #     return float(diff / divisor)
+    elif _WIN:
+        divisor = 0.0
+        ctrStart = wintypes.LARGE_INTEGER()
+        now = wintypes.LARGE_INTEGER()
+    
+        if divisor == 0.0:
+            freq = wintypes.LARGE_INTEGER()
+            windll.kernel32.QueryPerformanceCounter(byref(ctrStart))
+            res = windll.kernel32.QueryPerformanceCounter(byref(freq))
+            if not res or not freq:
+                return space.wrap(float(windll.msvcrt.clock()))
+            divisor = float(freq.value)
+    
+        windll.kernel32.QueryPerformanceCounter(byref(now))
+        diff = float(now.value - ctrStart.value)
+        return space.wrap(float(diff / divisor))
 
 def ctime(space, w_seconds=None):
     """ctime([seconds]) -> string



More information about the Pypy-commit mailing list