C语言的sleepusleepnanosleep等休眠函数如何使用
更新时间:2023-11-11sleep函数
sleep函数是C标准库中提供的一种休眠函数,它可以让线程暂停执行一段指定的时间,单位是秒。函数原型如下:
unsigned int sleep(unsigned int seconds);
其中,参数seconds表示休眠的时间,单位是秒。返回值是休眠剩余的时间。
下面是一个简单的示例代码:
#include <stdio.h> #include <unistd.h> int main() { printf("开始休眠\n"); sleep(5); printf("休眠结束\n"); return 0; }
在上面的代码中,程序会在开始休眠前输出一行文字,然后调用sleep函数进行休眠5秒钟。之后,程序会输出一行文字表示休眠结束。
usleep函数
usleep函数是C标准库中提供的另一种休眠函数,它可以让线程暂停执行一段指定的时间,单位是微秒。函数原型如下:
int usleep(useconds_t usec);
其中,参数usec表示休眠的时间,单位是微秒。函数返回值一般都是0,如果出现错误会返回-1。
下面是一个简单的示例代码:
#include <stdio.h> #include <unistd.h> int main() { printf("开始休眠\n"); usleep(5000000); // 休眠5秒钟 printf("休眠结束\n"); return 0; }
在上面的代码中,程序会在开始休眠前输出一行文字,然后调用usleep函数进行休眠5秒钟。之后,程序会输出一行文字表示休眠结束。
nanosleep函数
nanosleep函数和sleep函数、usleep函数类似,它也可以让线程暂停执行一段指定的时间。但nanosleep函数的精度更高,可以精确到纳秒级别。函数原型如下:
int nanosleep(const struct timespec *req, struct timespec *rem);
其中,参数req表示休眠的时间,rem表示休眠剩余的时间。两个参数的类型都是struct timespec结构体。
下面是一个简单的示例代码:
#include <stdio.h> #include <time.h> int main() { printf("开始休眠\n"); struct timespec req, rem; req.tv_sec = 5; // 秒数 req.tv_nsec = 0; // 纳秒数 int ret = nanosleep(&req, &rem); if (ret == -1) { printf("剩余休眠时间:%ld秒%ld纳秒\n", rem.tv_sec, rem.tv_nsec); } else { printf("休眠结束\n"); } return 0; }
在上面的代码中,程序会在开始休眠前输出一行文字,然后创建一个timespec结构体,填充休眠的时间,然后调用nanosleep函数进行休眠。如果休眠时间到了,那么函数会返回0,程序输出一行文字表示休眠结束;否则函数会返回-1,并将剩余休眠时间存入rem结构体中,程序输出一行文字表示剩余休眠时间。
总结
休眠函数是C语言标准库中提供的常用函数,可以让线程暂停执行一段时间。sleep函数是精度最低的休眠函数,单位是秒;usleep函数精度相对较高,单位是微秒;nanosleep函数最精确,单位可以精确到纳秒级别。在使用这些休眠函数时,应该注意参数的单位和类型,并根据需要选择合适的函数。