diff options
Diffstat (limited to 'moon-abe/pbc-0.5.14/misc/get_time.win32.c')
-rw-r--r-- | moon-abe/pbc-0.5.14/misc/get_time.win32.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/moon-abe/pbc-0.5.14/misc/get_time.win32.c b/moon-abe/pbc-0.5.14/misc/get_time.win32.c new file mode 100644 index 00000000..98463198 --- /dev/null +++ b/moon-abe/pbc-0.5.14/misc/get_time.win32.c @@ -0,0 +1,42 @@ +#include <stdint.h> // for intptr_t +#include <sys/time.h> +#include "pbc_utils.h" + +typedef struct _FILETIME { + unsigned long dwLowDateTime; + unsigned long dwHighDateTime; +} FILETIME; + +void __stdcall GetSystemTimeAsFileTime(FILETIME*); + +int __cdecl gettimeofday(struct timeval* p, void* tz) { + UNUSED_VAR(tz); + union { + long long ns100; // Time since 1 Jan 1601 in 100ns units. + FILETIME ft; + } _now; + + GetSystemTimeAsFileTime( &(_now.ft) ); + p->tv_usec=(long)((_now.ns100 / 10LL) % 1000000LL ); + p->tv_sec= (long)((_now.ns100-(116444736000000000LL))/10000000LL); + return 0; // Assume success? +} + +double pbc_get_time(void) { + static struct timeval last_tv, tv; + static int first = 1; + static double res = 0; + + if (first) { + gettimeofday(&last_tv, NULL); + first = 0; + return 0; + } else { + gettimeofday(&tv, NULL); + res += tv.tv_sec - last_tv.tv_sec; + res += (tv.tv_usec - last_tv.tv_usec) / 1000000.0; + last_tv = tv; + + return res; + } +} |