nuclear@8: #include "timer.h" nuclear@8: nuclear@8: #if defined(__APPLE__) && !defined(__unix__) nuclear@8: #define __unix__ nuclear@8: #endif nuclear@8: nuclear@8: #ifdef __unix__ nuclear@8: #include nuclear@8: #include nuclear@8: #include nuclear@8: nuclear@8: #ifdef CLOCK_MONOTONIC nuclear@8: unsigned long get_time_msec(void) nuclear@8: { nuclear@8: struct timespec ts; nuclear@8: static struct timespec ts0; nuclear@8: nuclear@8: clock_gettime(CLOCK_MONOTONIC, &ts); nuclear@8: if(ts0.tv_sec == 0 && ts0.tv_nsec == 0) { nuclear@8: ts0 = ts; nuclear@8: return 0; nuclear@8: } nuclear@8: return (ts.tv_sec - ts0.tv_sec) * 1000 + (ts.tv_nsec - ts0.tv_nsec) / 1000000; nuclear@8: } nuclear@8: #else /* no fancy POSIX clocks, fallback to good'ol gettimeofday */ nuclear@8: unsigned long get_time_msec(void) nuclear@8: { nuclear@8: struct timeval tv; nuclear@8: static struct timeval tv0; nuclear@8: nuclear@8: gettimeofday(&tv, 0); nuclear@8: if(tv0.tv_sec == 0 && tv0.tv_usec == 0) { nuclear@8: tv0 = tv; nuclear@8: return 0; nuclear@8: } nuclear@8: return (tv.tv_sec - tv0.tv_sec) * 1000 + (tv.tv_usec - tv0.tv_usec) / 1000; nuclear@8: } nuclear@8: #endif /* !posix clock */ nuclear@8: nuclear@8: void sleep_msec(unsigned long msec) nuclear@8: { nuclear@8: usleep(msec * 1000); nuclear@8: } nuclear@8: #endif nuclear@8: nuclear@8: #ifdef WIN32 nuclear@8: #include nuclear@8: #pragma comment(lib, "winmm.lib") nuclear@8: nuclear@8: unsigned long get_time_msec(void) nuclear@8: { nuclear@8: return timeGetTime(); nuclear@8: } nuclear@8: nuclear@8: void sleep_msec(unsigned long msec) nuclear@8: { nuclear@8: Sleep(msec); nuclear@8: } nuclear@8: #endif nuclear@8: nuclear@8: double get_time_sec(void) nuclear@8: { nuclear@8: return get_time_msec() / 1000.0f; nuclear@8: } nuclear@8: nuclear@8: void sleep_sec(double sec) nuclear@8: { nuclear@8: if(sec > 0.0f) { nuclear@8: sleep_msec(sec * 1000.0f); nuclear@8: } nuclear@8: }