30 #include <sys/timerfd.h>
38 #ifndef SYS_TIME_THREAD_PRIO
39 #define SYS_TIME_THREAD_PRIO 29
47 #define NSEC_OF_SEC(sec) ((sec) * 1e9)
54 fd = timerfd_create(CLOCK_MONOTONIC, 0);
56 perror(
"Could not set up timer.");
63 struct itimerspec timer;
65 timer.it_value.tv_sec = 0;
68 timer.it_interval.tv_sec = 0;
71 if (timerfd_settime(
fd, 0, &timer, NULL) == -1) {
72 perror(
"Could not set up timer.");
77 unsigned long long missed;
80 int r = read(
fd, &missed,
sizeof(missed));
82 perror(
"Couldn't read timer!");
85 fprintf(stderr,
"Missed %lld timer events!\n", missed);
103 perror(
"Could not setup sys_time_thread");
107 pthread_setname_np(tid,
"sys_time");
115 clock_gettime(CLOCK_MONOTONIC, &now);
124 d_nsec += 1000000000L;
160 clock_gettime(CLOCK_MONOTONIC, &now);
169 d_nsec += 1000000000L;
171 return d_sec * 1000000 + d_nsec / 1000;
182 clock_gettime(CLOCK_MONOTONIC, &now);
191 d_nsec += 1000000000L;
193 return d_sec * 1000 + d_nsec / 1000000;