En Tue, 26 Feb 2008 17:37:22 -0200, Nitro <[EMAIL PROTECTED]> escribió:
> today I encountered a very odd situation. I am on Windows Vista and using > Python 2.5.2. Here's a code snippet to illustrate my problem: > > # uncomment the next line to trigger the problem > # myExtensionModule.CreateDirect3D9Device() > import time > for i in range(0,100): > print time.time() > > With the line commented time.time() returns a changing value which is > what > I expect. However, when I uncomment it and create a Direct3D9 Device > [1][2] it keeps printing the very same number over and over! I had a similar problem some time ago. When a badly formatted audio file was played (on Windows XP, any player, not from Python), the C function ftime(&x) fails and fills x to all 0's from this moment on. ftime is supposed never to fail, but it does... time.time uses ftime on Windows. A possible workaround (floattime function, in timemodule.c): Change #if defined(HAVE_FTIME) struct timeb t; ftime(&t); return (double)t.time + (double)t.millitm * (double)0.001; #else /* !HAVE_FTIME */ time_t secs; time(&secs); return (double)secs; #endif /* !HAVE_FTIME */ to: time_t secs; #if defined(HAVE_FTIME) double res; struct timeb t; ftime(&t); res = (double)t.time + (double)t.millitm * (double)0.001; if (res>0) return res; #endif /* !HAVE_FTIME */ time(&secs); return (double)secs; (untested, I wrote this right now, but basically it's what I did that time). Finally the Python version was not patched, we just forbid to use that server to play MP3s :) As it was hard to reproduce the problem, I never got to submit a patch. > In my project > I am using twisted which uses time.time() to schedule all calls. Since > time.time() is completely screwed the whole application breaks. > I took a look at [3], but I can't see any obivous way how this all > interacts. Specifically I am not sure which API time.time() uses > internally (timeGetTime maybe?). Knowing this could probably help me > debug > more. See timemodule.c, time.time maps to time_time, which calls floattime, which on Windows uses ftime. > I feel like time.time() should not break (unless the vid card > driver/directx has a major bug). Any idea what might be happening here? > Replacing time.time() with time.clock() in twisted.python.runtime makes > the problem disappear. I guess because it uses QueryPerformanceCounter. Seems like a reasonable patch. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list