R..*_*R.. 10
nanosleep或者clock_nanosleep是您应该使用的功能(后者允许您指定绝对时间而不是相对时间,并使用单调时钟或其他时钟而不仅仅是实时时钟,如果操作员重置它可能会向后运行).
但要注意的是,就分辨率而言,你几乎不会超过几微秒,它总是会使睡眠持续时间变长,而不是四舍五入.(无论如何,向下舍入通常是不可能的,因为在大多数机器上,进入和退出内核空间需要超过一微秒.)
此外,如果可能的话,我会建议使用一个阻止等待事件的呼叫,而不是在小的时间间隔内休眠,然后进行轮询.例如,pthread_cond_wait,pthread_cond_timedwait,sem_wait,sem_timedwait,select,read,等,这取决于你的线程正在执行什么任务,以及它如何与其他线程同步和/或与外界通信.
一种相对便携的方式是使用select()或pselect()不使用文件描述符:
void sleep(unsigned long nsec) {
struct timespec delay = { nsec / 1000000000, nsec % 1000000000 };
pselect(0, NULL, NULL, NULL, &delay, NULL);
}
Run Code Online (Sandbox Code Playgroud)