首页 > 系统相关 >嵌入式Linux系统编程 — 5.5 sleep、usleep和nanosleep系统休眠函数

嵌入式Linux系统编程 — 5.5 sleep、usleep和nanosleep系统休眠函数

时间:2024-07-01 14:58:28浏览次数:21  
标签:usleep 5.5 seconds nanosleep 休眠 sleep 函数

目录

1 为什么需要休眠

2 sleep、usleep和nanosleep函数

2.1 sleep函数

2.2 usleep函数

2.3 nanosleep函数

3 示例程序


1 为什么需要休眠

有时需要将进程暂停或休眠一段时间, 进入休眠状态之后,程序将暂停运行,直到休眠结束。
以下是一些常见的休眠场景和作用:

  • 避免过载:在高负载或密集计算任务中,程序可能需要定期休眠,以避免长时间占用CPU,给系统其他部分留出处理时间。

  • 定时任务:在需要执行定时任务的场景中,休眠可以用于实现简单的时间调度。

  • 错误恢复:在遇到错误或异常时,程序可能会选择休眠一段时间,然后重试操作,这可以作为简单的错误恢复机制。

  • 节能:在某些嵌入式系统或移动设备上,休眠可以用于节能,通过减少CPU的活动来降低功耗。

在Linux系统中,实现休眠的常用函数包括:

  • sleep():基于秒的休眠。
  • usleep():基于微秒的休眠(1微秒 = 10^-6秒)。
  • nanosleep():基于纳秒的休眠(1纳秒 = 10^-9秒),提供了更精细的控制。

2 sleep、usleep和nanosleep函数

2.1 sleep函数

sleep函数使调用进程休眠指定的秒数。

#include <unistd.h>

unsigned int sleep(unsigned int seconds);
  • seconds:要休眠的秒数。
  • 返回值: 如果休眠时长为参数 seconds 所指定的秒数,则返回 0;若被信号中断则返回剩余的秒数。

2.2 usleep函数

usleep函数使调用进程休眠指定的微秒数。

#include <unistd.h>

int usleep(useconds_t usec)
  • 参数:usec - 要休眠的微秒数。
  • 返回值: 成功返回 0;失败返回-1,并设置 errno。
     

2.3 nanosleep函数

nanosleep函数使调用进程休眠指定的纳秒数。

#include <time.h>

int nanosleep(const struct timespec *req, struct timespec *rem);
  • req - 指向 timespec 结构的指针,该结构指定要休眠的时间。
  • rem - 指向 timespec 结构的指针,用于存储未完成的剩余时间(如果函数被中断)。
  • 返回值: 在成功休眠达到请求的时间间隔后, nanosleep()返回 0; 如果中途被信号中断或遇到错误,则返回-1, 并将剩余时间记录在参数 rem 指向的 struct timespec 结构体变量中(参数 rem 不为 NULL 的情况下,如果为 NULL 表示不接收剩余时间),还会设置 errno 标识错误类型。

3 示例程序

示例程序使用 sleep()usleep()nanosleep() 函数演示了当这些函数因信号中断时如何处理剩余的休眠时间。

#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>

int main() 
{
    // 使用 sleep() 函数休眠 2 秒
    printf("使用 sleep() 休眠 2 秒...\n");
    unsigned int seconds = 2;
    unsigned int remaining_seconds = sleep(seconds);
    if (remaining_seconds == 0) {
        printf("sleep() 正常结束。\n");
    } else {
        printf("sleep() 被中断,剩余休眠时间:%u 秒。\n", remaining_seconds);
    }

    // 使用 usleep() 函数休眠 1000 微秒
    printf("使用 usleep() 休眠 1000 微秒...\n");
    unsigned long usecs = 1000;
    int result = usleep(usecs);
    if (result == 0) {
        printf("usleep() 正常结束。\n");
    } else {
        printf("usleep() 被中断,错误码:%d。\n", errno);
    }

    // 使用 nanosleep() 函数休眠 100 毫秒
    printf("使用 nanosleep() 休眠 100 毫秒...\n");
    struct timespec req, rem;
    req.tv_sec = 0;
    req.tv_nsec = 100000000; // 100 毫秒
    while (nanosleep(&req, &rem) == -1) {
        if (errno == EINTR) {
            // 如果 nanosleep 被中断,更新剩余时间并重试
            req = rem;
        } else {
            perror("nanosleep 遇到错误");
            break;
        }
    }
    printf("nanosleep() 正常结束。\n");

    return 0;
}

运行结果如下:

标签:usleep,5.5,seconds,nanosleep,休眠,sleep,函数
From: https://blog.csdn.net/qq_41921826/article/details/140060497

相关文章

  • AP5162 降压恒流芯片 输入5.5-36V 输出800mA 20W 雾灯 指示灯方案
    概述AP5162是一款降压、恒流、高效率的高亮度LED驱动器。AP5162特别适合宽输入电压范围的应用,输入电压范围从5.5V到36V,并且AP5162对输入电压具有高的抑制比。AP5162采用内置的低导通电阻的功率开关管,简化了芯片的外围电路,只需很少的外接元件就可实现降压、恒流驱......
  • 5.5
    题目:上机实验四:共轭梯度法程序设计1、基本要求掌握共轭梯度法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。2、主要内容(1)求解无约束优化问题:(2)终止准则取;(3)完成FR共轭梯度法的MATLAB编程、调试;(4)选取几个与实验......
  • Linux 35.5 + JetPack v5.1.3@ ego-planner编译安装
    Linux35.5+JetPackv5.1.3@ego-planner编译安装1.源由2.编译&安装Step1:依赖库安装Step2:建立工程Step3:编译工程Step4:安装工程3.问题汇总3.1planner/plan_env-OpenCV3.2uav_simulator/local_sensing-CUDA优化4.总结1.源由Fast-PlannerFUELRACEReg......
  • 囚徒5.5_将给数字特征转化为数字特征
    代码片段是TensorFlow中特征列(featurecolumns)的创建过程,用于处理分类和数值数据。这在构建机器学习模型时非常有用,特别是在使用TensorFlow的高级API如TFEstimator时。这里是代码片段的解释和稍微修改后的版本:importnumpyasnpimportpandasaspdimportmatplotlib.pyplot......
  • 万兴全能格式转换器v15.5.10.97绿色版
    软件介绍万兴全能格式转换器,又叫万兴优转,国产全能音视频格式转换解决方案。具有音视频格式转换、合并视频、压缩视频、录制视频、下载视频、DVD刻录等功能。以超快的转换速度及强大的功能在国外名声大噪,转换速度是市面同类产品的30倍,操作简便,支持158种视频格式无损转换,批量转......
  • SD8002D单声道功率放大器输入1KHZ5V电压驱动功率SOP8封装2.0V-5.5V
    SD8002D是一款AB类,单声道带关断模式,桥式音频功率放大器。在输入1KHz,5V工作电压时,最大驱动功率为:3W,(4Ω负载,总谐波失真<10%),2W,(4Ω负载,总谐波失真<1%);音频范围内总谐波失真噪音小于1%(20赫兹·20KHz);SD8002D应用电路简单,只需要极少数外围器件,就能提供高品质的输出功率。......
  • 遥感SCI期刊,中科院2区,IF=5.5,收稿范围广泛!
    一、期刊名称RemoteSensinginEcologyandConservation二、期刊简介概况期刊类型:SCI学科领域:遥感影响因子:5.5中科院分区:2区三、期刊征稿范围《生态与保护中的遥感》提供了一个论坛,供在遥感科学与生态和保护之间界面上快速、同行评审的新型多学科研究发表。该杂......
  • Cisco Secure Email Virtual Gateway 15.5.1 GD - 电子邮件安全
    CiscoSecureEmailVirtualGateway15.5.1GD-电子邮件安全AsyncOSforESA15GeneralDeployment(GD)请访问原文链接:CiscoSecureEmailVirtualGateway15.5.1GD-电子邮件安全,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoSecureEmail提供高级......
  • Cisco Secure Email and Web Manager Virtual 15.5.1 GD - 集中管理思科安全设备
    CiscoSecureEmailandWebManagerVirtual15.5.1GD-集中管理思科安全设备AsyncOSforSMA15GeneralDeployment(GD)请访问原文链接:CiscoSecureEmailandWebManagerVirtual15.5.1GD-集中管理思科安全设备,查看最新版。原创作品,转载请保留出处。作者主页:sysin.......
  • VMware Workstation Pro各版本下载(2024.5.5之后)
    最近有人反映说之前的VMwareWorkstation链接无法下载VMware,索性直接分享几个常用安装包,大家可以点击链接下载。整理不易,点赞关注一下吧1.系统要求VM17:硬件要求较高,Windows10或更高版64位。VM16:硬件要求较高,Windows10或更高版64位。VM12:硬件要求低,Windows7或更高版64位......