[Python-Dev] time.clock() on windows
Mark Hammond
mhammond at skippinet.com.au
Thu Oct 22 12:57:53 CEST 2009
On 22/10/2009 8:47 PM, Kristján Valur Jónsson wrote:
> The point in question seems to be this this (from the thread):
> * Need some sort of static "start value", which is set when the
> process starts, so I can return to Python in seconds. An easy hack
> is to set this the first time clock() is called, but then it wont
> reflect any sort of real time - but would be useful for relative
> times...
>
> But the argumentation is flawed.
It was made in the context of the APIs available to implement this. The
code is short-and-sweet in timemodule.c, so please do go ahead and fix
my flawed reasoning.
For reference:
#if defined(MS_WINDOWS) && !defined(__BORLANDC__)
/* Due to Mark Hammond and Tim Peters */
static PyObject *
time_clock(PyObject *self, PyObject *unused)
{
static LARGE_INTEGER ctrStart;
static double divisor = 0.0;
LARGE_INTEGER now;
double diff;
if (divisor == 0.0) {
LARGE_INTEGER freq;
QueryPerformanceCounter(&ctrStart);
if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
/* Unlikely to happen - this works on all intel
machines at least! Revert to clock() */
return PyFloat_FromDouble(((double)clock()) /
CLOCKS_PER_SEC);
}
divisor = (double)freq.QuadPart;
}
QueryPerformanceCounter(&now);
diff = (double)(now.QuadPart - ctrStart.QuadPart);
return PyFloat_FromDouble(diff / divisor);
}
Cheers,
Mark.
More information about the Python-Dev
mailing list