|
|
@ -24,6 +24,71 @@ |
|
|
|
|
|
|
|
|
#include "trbase.h" |
|
|
#include "trbase.h" |
|
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32 |
|
|
|
|
|
#include <Windows.h> |
|
|
|
|
|
|
|
|
|
|
|
static |
|
|
|
|
|
LARGE_INTEGER |
|
|
|
|
|
getFILETIMEoffset() |
|
|
|
|
|
{ |
|
|
|
|
|
SYSTEMTIME s; |
|
|
|
|
|
FILETIME f; |
|
|
|
|
|
LARGE_INTEGER t; |
|
|
|
|
|
|
|
|
|
|
|
s.wYear = 1970; |
|
|
|
|
|
s.wMonth = 1; |
|
|
|
|
|
s.wDay = 1; |
|
|
|
|
|
s.wHour = 0; |
|
|
|
|
|
s.wMinute = 0; |
|
|
|
|
|
s.wSecond = 0; |
|
|
|
|
|
s.wMilliseconds = 0; |
|
|
|
|
|
SystemTimeToFileTime(&s, &f); |
|
|
|
|
|
t.QuadPart = f.dwHighDateTime; |
|
|
|
|
|
t.QuadPart <<= 32; |
|
|
|
|
|
t.QuadPart |= f.dwLowDateTime; |
|
|
|
|
|
return (t); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int |
|
|
|
|
|
clock_gettime(int X, struct timespec *tv) |
|
|
|
|
|
{ |
|
|
|
|
|
LARGE_INTEGER t; |
|
|
|
|
|
FILETIME f; |
|
|
|
|
|
double microseconds; |
|
|
|
|
|
static LARGE_INTEGER offset; |
|
|
|
|
|
static double frequencyToMicroseconds; |
|
|
|
|
|
static int initialized = 0; |
|
|
|
|
|
static BOOL usePerformanceCounter = 0; |
|
|
|
|
|
|
|
|
|
|
|
if (!initialized) { |
|
|
|
|
|
LARGE_INTEGER performanceFrequency; |
|
|
|
|
|
initialized = 1; |
|
|
|
|
|
usePerformanceCounter = QueryPerformanceFrequency(&performanceFrequency); |
|
|
|
|
|
if (usePerformanceCounter) { |
|
|
|
|
|
QueryPerformanceCounter(&offset); |
|
|
|
|
|
frequencyToMicroseconds = (double)performanceFrequency.QuadPart / 1000000.; |
|
|
|
|
|
} else { |
|
|
|
|
|
offset = getFILETIMEoffset(); |
|
|
|
|
|
frequencyToMicroseconds = 10.; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if (usePerformanceCounter) QueryPerformanceCounter(&t); |
|
|
|
|
|
else { |
|
|
|
|
|
GetSystemTimeAsFileTime(&f); |
|
|
|
|
|
t.QuadPart = f.dwHighDateTime; |
|
|
|
|
|
t.QuadPart <<= 32; |
|
|
|
|
|
t.QuadPart |= f.dwLowDateTime; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
t.QuadPart -= offset.QuadPart; |
|
|
|
|
|
microseconds = (double)t.QuadPart / frequencyToMicroseconds; |
|
|
|
|
|
t.QuadPart = microseconds; |
|
|
|
|
|
tv->tv_sec = t.QuadPart / 1000000; |
|
|
|
|
|
tv->tv_nsec = t.QuadPart % 1000000; |
|
|
|
|
|
return (0); |
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
static |
|
|
static |
|
|
int |
|
|
int |
|
|
timerCtor(void * _this, va_list * params) |
|
|
timerCtor(void * _this, va_list * params) |
|
|
|