一、介绍
sleep()低精度休眠,精度是秒 ,可以被信号中断,如果被信号中断返回剩余秒数。所以sleep,alarm,setitimer 最好不要结合使用
nanosleep()高精度休眠,精度是纳秒,也是可以被信号中断。
二、函数接口
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
参数:
seconds:秒数
返回值:
正常休眠结束返回0,如果被信号中断,返回剩余秒数
#include <time.h>
int nanosleep(const struct timespec *request, struct timespec *remain);
参数:
req: struct timespec类型指针,设置休眠的时间
remain:若remain不为NULL,那么指针指向的缓冲区返回剩余的休眠时间,可以利用
这一返回值重启系统调用完成休眠
返回值:
如果被信号中断返回-1,并设置errno为EINTR.
注意:虽然nanosleep 精度很高,但是还是受到软件时钟间隔大小影响,
假设一个间隔是19毫秒的定时器,如果jiffy(软时钟周期)是4毫秒,时器实际上会每隔20毫秒
struct timespec {
time_t tv_sec;