00001
00002
00003
00004
00005
00006
00007 #include <stdio.h>
00008 #include <pctimer.h>
00009
00010 #ifdef __MINGW32__
00011 #include <windows.h>
00012 #include <winsock2.h>
00013
00014 int gettimeofday(struct timeval *tv, void *tz);
00015 #else
00016 #define HAVE_GETTIMEOFDAY
00017 #endif
00018
00019 #ifndef __GNUC__
00020 #define EPOCHFILETIME (116444736000000000i64)
00021 #else
00022 #define EPOCHFILETIME (116444736000000000LL)
00023 #endif
00024
00025
00026 #include <sys/time.h>
00027
00028
00029 pctimer_t pctimer(void)
00030 {
00031 struct timeval tv;
00032 gettimeofday(&tv, NULL);
00033 return (double)tv.tv_sec + (double)tv.tv_usec / 1000000;
00034 }
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 #ifndef HAVE_GETTIMEOFDAY
00057 int gettimeofday(struct timeval *tv, void *tz)
00058 {
00059 FILETIME ft;
00060 LARGE_INTEGER li;
00061 __int64 t;
00062
00063 if (tv)
00064 {
00065 GetSystemTimeAsFileTime(&ft);
00066 li.LowPart = ft.dwLowDateTime;
00067 li.HighPart = ft.dwHighDateTime;
00068 t = li.QuadPart;
00069 t -= EPOCHFILETIME;
00070 t /= 10;
00071 tv->tv_sec = (long)(t / 1000000);
00072 tv->tv_usec = (long)(t % 1000000);
00073 }
00074 return 0;
00075 }
00076
00077 #endif
00078