该 clock_nanosleep() POSIX函数有一个绝对截止日期模式:
clock_nanosleep()
#define NSEC_PER_SEC 1000000000 /* Initial delay, 7.5ms */ const long start_delay_ns = 7500000; /* Cycle time, 1ms */ const long cycle_time_ns = 1000000; struct timespec deadline; clock_gettime(CLOCK_MONOTONIC, &deadline); deadline.tv_nsec += start_delay_ns; deadline.tv_sec += deadline.tv_nsec / NSEC_PER_SEC; deadline.tv_nsec %= NSEC_PER_SEC; for (;;) { struct timespec now; /* Sleep until deadline */ while (clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &deadline, NULL) != 0) if (errno != EINTR) return; /* error handling here */ pFunction(pArguments); /* thread function: send data */ /* Calculate next deadline */ deadline.tv_nsec += cycle_time_ns; deadline.tv_sec += deadline.tv_nsec / NSEC_PER_SEC; deadline.tv_nsec %= NSEC_PER_SEC; clock_gettime(CLOCK_MONOTONIC, &now); if (now.tv_sec > deadline.tv_sec || (now.tv_sec == deadline.tv_sec && deadline.tv_nsec > now.tv_nsec)) return; /* time overrun error handling here */ }