3 #if defined(__APPLE__) && !defined(__unix__)
12 #ifdef CLOCK_MONOTONIC
13 unsigned long get_time_msec(void)
16 static struct timespec ts0;
18 clock_gettime(CLOCK_MONOTONIC, &ts);
19 if(ts0.tv_sec == 0 && ts0.tv_nsec == 0) {
23 return (ts.tv_sec - ts0.tv_sec) * 1000 + (ts.tv_nsec - ts0.tv_nsec) / 1000000;
25 #else /* no fancy POSIX clocks, fallback to good'ol gettimeofday */
26 unsigned long get_time_msec(void)
29 static struct timeval tv0;
32 if(tv0.tv_sec == 0 && tv0.tv_usec == 0) {
36 return (tv.tv_sec - tv0.tv_sec) * 1000 + (tv.tv_usec - tv0.tv_usec) / 1000;
38 #endif /* !posix clock */
40 void sleep_msec(unsigned long msec)
46 #if defined(WIN32) || defined(__WIN32__)
49 #pragma comment(lib, "winmm.lib")
52 unsigned long get_time_msec(void)
57 void sleep_msec(unsigned long msec)
63 double get_time_sec(void)
65 return get_time_msec() / 1000.0f;
68 void sleep_sec(double sec)
71 sleep_msec(sec * 1000.0f);
84 start_time = get_time_msec();
91 start_time += get_time_msec() - pause_time;
99 pause_time = get_time_msec();
103 bool Timer::is_running() const
105 return pause_time == 0;
108 unsigned long Timer::get_msec() const
111 // in paused state...
112 return pause_time - start_time;
114 return get_time_msec() - start_time;
117 double Timer::get_sec() const
119 return (double)get_msec() / 1000.0;