c语言编程笔录

首页 >   > 笔记大全

笔记大全

C语言的sleepusleepnanosleep等休眠函数如何使用

更新时间:2023-11-11

sleep函数

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函数最精确,单位可以精确到纳秒级别。在使用这些休眠函数时,应该注意参数的单位和类型,并根据需要选择合适的函数。