介绍
让程序休眠(延时)指定的时间,然后再继续执行。是阻塞函数,调用期间当前线程会暂停执行,不消耗 CPU 资源,但会阻塞后续代码运行,需避免在实时性要求高的场景中使用过长延时
头文件
使用这些函数时,需要加上下面头文件才能调用:
#include <unistd.h>
sleep()
秒级延时
定义
unsigned int sleep (unsigned int __seconds);
参数:
__seconds:需要休眠的时间,单位:秒
返回值:成功返回 0;失败返回 -1(例如 __seconds 超过最大值)。
例子
#include <stdio.h>
#include <unistd.h>
int main() {
printf("Hello, World!\n");
sleep(3);
printf("Hello, World!\n");
return 0;
}
usleep()
微秒级延时
秒、毫秒、微秒、纳秒换算详见 链接
定义
int usleep(unsigned int __useconds);
参数:
__useconds:需要休眠的时间,单位:微秒,范围通常为0到1,000,000(即最大支持 1 秒延时,部分平台可能支持更大值)。
返回值:成功返回 0;失败返回 -1(例如 usec 超过最大值)。
nanosleep()
纳秒级延时,精度最高(1微秒=1000纳秒)
秒、毫秒、微秒、纳秒换算详见 链接
定义
int nanosleep(const struct timespec *req, struct timespec *rem);
参数:
req:struct timespec类型指针,设置休眠的时间rem: 若remain不为NULL,那么指针指向的缓冲区返回剩余的休眠时间
返回值:成功返回 0;失败返回 -1
timespec结构体
struct timespec {
time_t tv_sec; /* 秒 */
long tv_nsec; /* 纳秒 范围是0-999999999(9个9)*/
};
例子
#include <stdio.h>
#include <time.h>
int main(int argc, char *argv[])
{
struct timespec s_sleep;
struct timespec ns_sleep;
s_sleep.tv_sec = 5; // 5秒
ns_sleep.tv_nsec = 999999999; // 约1秒
while(1)
{
nanosleep(&s_sleep, 0);
printf("5 seconds passed...\n");
printf("\n");
nanosleep(&ns_sleep, 0);
printf("1 seconds passed...\n");
printf("\n");
}
return 0;
}