使用usleep
调用来调整应用程序(在Linux 2.6.31上运行)。但是,它似乎无法适应日期更改(使用shell中的date
或使用其他进程中的clock_settime
)。
什么是正确的做法,以避免应用程序被锁定?
EDIT1
假设应用程序想要每100毫秒做一些事情。当作业完成时,它会调用gettimeofday,并推断剩余的ms要睡眠,直到下一个100ms切片,然后它会调用usleep。
答案 0 :(得分:2)
如果您必须确定时间间隔,而不是当前日期/时间,则必须使用此电话:
struct timespec tim;
uint64_t microsec;
clock_gettime(CLOCK_MONOTONIC,& tim);
microsec = 1000000ULL * tim.tv_sec + tim.tv_nsec / 1000;
这是您的系统正常运行时间,真正的完整“硬件”时间(无法修改)。
关于您的定期例程,您可以使用alarm()和setitimer()设置周期性处理程序。