5#include <sys/_types/_timespec.h>
8#include <mach/mach_time.h>
15#define TIMER_ABSTIME -1
16#define CLOCK_REALTIME CALENDAR_CLOCK
17#define CLOCK_MONOTONIC SYSTEM_CLOCK
19#if !defined(__DARWIN_C_LEVEL) || __DARWIN_C_LEVEL < 199309L
29#include <mach/mach_time.h>
31#define MT_NANO (+1.0E-9)
32#define MT_GIGA UINT64_C(1000000000)
35static double mt_timebase = 0.0;
36static uint64_t mt_timestart = 0;
41 kern_return_t retval = KERN_SUCCESS;
45 mach_timebase_info_data_t tb = { 0 };
46 mach_timebase_info(&tb);
47 mt_timebase = tb.numer;
48 mt_timebase /= tb.denom;
49 mt_timestart = mach_absolute_time();
52 double diff = (mach_absolute_time() - mt_timestart) * mt_timebase;
54 tp->tv_nsec = diff - (tp->tv_sec *
MT_GIGA);
61 host_get_clock_service(mach_host_self(), clk_id, &cclock);
62 retval = clock_get_time(cclock, &mts);
63 mach_port_deallocate(mach_task_self(), cclock);
65 tp->tv_sec = mts.tv_sec;
66 tp->tv_nsec = mts.tv_nsec;
int clockid_t
Definition: mach_gettime.h:20
int clock_gettime(clockid_t clk_id, struct timespec *tp)
Definition: mach_gettime.h:39
#define MT_NANO
Definition: mach_gettime.h:31
#define MT_GIGA
Definition: mach_gettime.h:32
#define TIMER_ABSTIME
Definition: mach_gettime.h:15