Linux 中的 sleep、usleep 与 nanosleep 使用区别

举报
yd_292627789 发表于 2026/11/02 14:16:21 2026/11/02
【摘要】 一、前言在 Linux C/C++ 开发中,经常需要让程序暂停一段时间,例如等待设备初始化、控制线程启动间隔、降低循环执行频率等。Linux 提供了多种休眠函数,其中比较常见的是 sleep()、usleep() 和 nanosleep()。二、常见休眠函数1. sleep()sleep() 的单位是秒。#include <unistd.h>sleep(5); // 暂停 5 秒适合较长时间...

一、前言

在 Linux C/C++ 开发中,经常需要让程序暂停一段时间,例如等待设备初始化、控制线程启动间隔、降低循环执行频率等。

Linux 提供了多种休眠函数,其中比较常见的是 sleep()、usleep() 和 nanosleep()。

二、常见休眠函数

1. sleep()

sleep() 的单位是秒。

#include <unistd.h>

sleep(5); // 暂停 5 秒

适合较长时间的休眠,例如程序启动后等待设备就绪。

2. usleep()

usleep() 的单位是微秒(μs)。

#include <unistd.h>

usleep(200); // 暂停 200 微秒
usleep(100000); // 暂停 100 毫秒

换算关系:

  • 1 秒 = 1000 毫秒

  • 1 毫秒 = 1000 微秒

  • 1 秒 = 1000000 微秒

适合需要使用微秒作为时间单位的场景。

3. nanosleep()

nanosleep() 的单位是纳秒(ns),可以通过结构体分别指定秒和纳秒。

#include <time.h>

struct timespec ts;
ts.tv_sec = 1;
ts.tv_nsec = 500000000;

nanosleep(&ts, nullptr); // 暂停 1.5 秒

相比 sleep() 和 usleep(),它可以更加灵活地指定休眠时间。

三、三种函数对比

函数 时间单位 典型使用场景
sleep() 秒 长时间等待
usleep() 微秒 短时间等待
nanosleep() 纳秒 灵活指定休眠时间

需要注意:时间单位更小,并不意味着实际休眠精度一定更高。实际休眠时间还受到操作系统调度、系统负载和定时器精度等因素影响。

另外,usleep() 在 POSIX.1-2008 中已被标记为废弃接口,新代码通常更推荐使用 nanosleep()。

四、实际开发中的注意事项

在多线程程序中,休眠只会让当前线程进入等待状态,不会主动暂停整个进程中的其他线程。

例如:

while (m_running)
{
    processData();

    std::this_thread::sleep_for(
        std::chrono::milliseconds(200)
    );
}

这里使用 C++ 标准库的 sleep_for(),让当前线程每次处理完数据后等待 200 毫秒。

五、总结

在 Linux C/C++ 开发中,休眠函数主要用于控制程序执行节奏。

  • sleep():适合秒级休眠。

  • usleep():适合微秒单位的休眠,但属于较旧接口。

  • nanosleep():提供更灵活的时间控制。

  • C++ 项目中也可以优先考虑 std::this_thread::sleep_for()。

选择合适的休眠方式,可以让程序的线程调度和执行逻辑更加清晰。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。