- void _time(struct timespec& ts)
- {
-#ifdef __MACH__ // OSX lacks clock_gettime()
- clock_serv_t _clock_serv;
- mach_timespec_t _mach_timespec;
- host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &_clock_serv);
- clock_get_time(_clock_serv, &_mach_timespec);
- mach_port_deallocate(mach_task_self(), _clock_serv);
- ts.tv_sec= _mach_timespec.tv_sec;
- ts.tv_nsec= _mach_timespec.tv_nsec;
-#elif defined(HAVE_CLOCK_GETTIME) && HAVE_CLOCK_GETTIME
- int ret;
- do
- {
- ret= clock_gettime(CLOCK_REALTIME, &ts);
- } while (ret == -1);
-#elif defined(HAVE_GETTIMEOFDAY) && HAVE_GETTIMEOFDAY
- struct timeval tv;
- int ret;
- do
- {
- ret= gettimeofday(&tv, NULL)
- } while (ret == -1);
- /* Convert from timeval to timespec */
- ts.tv_sec= tv.tv_sec;
- ts.tv_nsec= tv.tv_usec * 1000;
-#else
- memset(&ts, 0, sizeof(struct timespec));
-#endif
- }