わたなべです。

Yukihiro Matsumoto <matz / zetabits.com> writes:

:要するに今のgettimeofdayは精度が悪すぎってことのようです。
:このパッチを参考にwin32/win32.cの実装を書き換えればよいって
:ことでしょうか?

winmm.dllってどこにでもあるのかよくわからないので
GetLocalTime()を使うようにしてみました。
#Time::HiResからのパクりだけど。

Index: win32/win32.c
===================================================================
RCS file: /src/ruby/win32/win32.c,v
retrieving revision 1.31.2.4
diff -u -1 -r1.31.2.4 win32.c
--- win32/win32.c	2001/02/24 13:19:06	1.31.2.4
+++ win32/win32.c	2001/03/05 08:17:50
@@ -2428,9 +2428,19 @@
 {                                
-    struct timeb tb;
+    SYSTEMTIME st;
+    time_t t;
+    struct tm tm;
 
-    ftime(&tb);
-    tv->tv_sec = tb.time;
-    tv->tv_usec = tb.millitm * 1000;
+    GetLocalTime(&st);
+    tm.tm_sec = st.wSecond;
+    tm.tm_min = st.wMinute;
+    tm.tm_hour = st.wHour;
+    tm.tm_mday = st.wDay;
+    tm.tm_mon = st.wMonth - 1;
+    tm.tm_year = st.wYear - 1900;
+    tm.tm_isdst = -1;
+    t = mktime(&tm);
+    tv->tv_sec = t;
+    tv->tv_usec = st.wMilliseconds * 1000;
 
-	return 0;
+    return 0;
 }