文章目录

  • 一、睡眠函数
  • 二、时钟处理

一、睡眠函数

  Linux 下有 2 个睡眠函数,原型分别为:

 #include <unistd.h>unsigned int sleep(unsigned int seconds);void usleep(unsigned long usec);

  函数 sleep 让进程睡眠 seconds 秒,函数 usleep 让进程睡眠 usec 微秒。
  sleep 睡眠函数内部是用信号机制进行处理的,用到的函数有:

 #include <unistd.h>unsigned int alarm(unsigned int seconds);//告知自身进程,要进程在 seconds 秒后自动产生一个 SIGALRM 信号int pause(void);//将自身进程挂起,直到有信号发生时才从 pause 返回

  注意:因为 sleep 在内部是用 alarm 实现的,所以在程序中最好不要 sleep 与 alarm 混用,以免造成混乱。

二、时钟处理

  Linux 为每个进程维护 3 个计时器,分别是真实计时器、虚拟计时器和实用计时器。

  • 真实计时器计算的是程序运行的实际时间;
  • 虚拟计时器计算的是程序运行在用户态时所消耗的时间(可以认为是实际时间减掉系统调用和程序睡眠所消耗的时间);
  • 实用计时器计算的是程序处于用户态和处于内核态所消耗的时间之和。

  例如:一个程序在用户态运行了 5 秒,在内核态运行了 6 秒,还睡眠了 7 秒,则真实计时器计算的结果是 18 秒,虚拟计时器计算的是 5 秒,实用计时器计算的是 11 秒。

  用指定的初始间隔和重复间隔时间为进程设定好一个计时器后,该计时器就会定时的向进程发送时钟信号。3 个计时器发送的时钟信号分别为:SIGALRM、SIGVTALRM 和 SIGPROF。
  用到的函数与数据结构:

 #include <sys/time.h>int getitimer(int which, struct itimerval * value);//获取计时器的设置

  参数 which 指定哪个计时器,可选项为 ITIMER_REAL(真实计时器)、ITIMER_VIRTUAL(虚拟计时器)、ITIMER_PROF(实用计时器)。
  参数 value 为一结构体的传出参数,用于传出该计时器的初始间隔时间和重复间隔时间。
  返回值:如果成功,返回0,否则返回 -1。

 int setitimer(int which, const struct itimerval * value, struct itimerval * ovalue);//设置计时器

  参数 which 指定哪个计时器,可选项为 ITIMER_REAL(真实计时器)、ITIMER_VIRTUAL(虚拟计时器)、ITIMER_PROF(实用计时器)。
  参数 value 为一结构体传入参数,指定该计时器的初始间隔时间和重复间隔时间。
  参数 ovalue 为一结构体传出参数,用于传出以前的计时器时间设置。
  返回值:如果成功,返回 0, 否则 -1 。

 struct itimerval{struct timeval it_interval;        //重复间隔struct timeval it_value;      //初始间隔};struct timeval{long tv_sec;                 //时间的秒数部分long tv_usec;                  //时间的微秒部分};

嵌入式Linux系统编程学习之十七计时器与信号相关推荐

  1. 嵌入式Linux系统编程学习之二常用命令

    嵌入式Linux系统编程学习之二常用命令 文章目录 嵌入式Linux系统编程学习之二常用命令 前言 一.常用命令 1.su(用户切换) 2.useradd(添加用户) 3.passwd(修改密码) 4 ...

  2. 嵌入式Linux系统编程学习之一目录结构

    嵌入式Linux系统编程学习之一目录结构 文章目录 嵌入式Linux系统编程学习之一目录结构 前言 一.Linux目录结构 前言 Linux目录结构 一.Linux目录结构 /bin:存放Linux的 ...

  3. 嵌入式Linux系统编程学习之九基于文件描述符的文件操作

    文章目录 前言 一.文件描述符 二.打开.创建和关闭文件 三.读写文件 四.改变文件大小 五.文件定位 六.原子操作 七.进一步理解文件描述符 八.文件描述符的复制 九.文件的锁定 十.获取文件信息 ...

  4. 嵌入式Linux系统编程学习之八基于文件指针的文件操作

    文章目录 前言 一.文件的创建.打开与关闭 二.读写文件 三.文件定位 四.标准输入/输出流 五.目录操作 前言   对文件进行操作有打开文件.关闭文件.读写文件.   文件指针:每打开一个文件,就返 ...

  5. 嵌入式Linux系统编程学习之三vi编辑器

    文章目录 前言 一.插入文本 二.删除与修改 三.光标的移动 四.查找与替换 五.块操作 六.结束编辑 前言 在Linux下编程,使用编辑器vi(vim).gedit或Emacs,编译链接器gcc,调 ...

  6. 嵌入式Linux系统编程学习之十三信号概念

      信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件),是硬件中断的软件模拟(软中断),它是 UNIX 进程通信最古老的方法.信号可以直接进行用户空间进程和内核进程之间的交互,内核进程 ...

  7. 嵌入式Linux系统编程学习之二十七线程的创建和退出

      创建线程实际上就是确定调用该线程函数的入口点,线程的创建采用函数 pthread_create .在线程创建以后,就开始运行相关的线程函数,在该函数运行完之后,线程就退出,这也是线程退出的一种方式 ...

  8. 嵌入式Linux系统编程学习之十一Linux进程的创建与控制

    文章目录 一.fork函数 二.进程的终止 三.wait 和 waitpid 函数 四.exec 函数族 五.system 函数 六.popen 函数 总结 一.fork函数 fork 函数原型: # ...

  9. 嵌入式Linux系统编程学习之三十三网络相关概念

    文章目录 一.网络相关名词的概念 1.套接口 2.端口号 3.IP 地址 二.Socket 概念 三.Socket 类型 四.Socket 的信息数据结构 五.数据存储优先顺序的转换 六.地址转格式转 ...

最新文章

  1. unity 程序win7在进程里运行_Win7系统中unity web player是什么程序
  2. flutter 应用场景_Flutter混合开发的路由栈管理
  3. “睡服”面试官系列第二十三篇之修饰器(建议收藏学习)
  4. threejs获取模型坐标_Threejs倒影实现解析
  5. 第k个数组中的最小值
  6. postman发送报文时请求时间超时因为什么_面试官说不要再问我三次握手和四次挥手是什么了...
  7. python两列相乘_如何将pandas中具有不同索引的两列相乘?
  8. VALSE2019总结(6)-年度总结-物体检测
  9. 拦截器获取请求参数post_spring boot拦截器中获取request post请求中的参数
  10. 用html代码在word中插入分页符,Word分页符怎么用?Word插入分页符的方法
  11. ntp子母钟(gps子母钟系统)时钟系统在智能交通系统中的重要性
  12. 火影忍者粉:入手一个酷炫的NARUTO发光手机壳
  13. CentOS7环境安装oracleRAC集群遇到的问题总结二(执行root.sh报错ORA-15018和ORA-15020)
  14. 如何正确安装朗文英文当代大词典(2CD版)
  15. C语言题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
  16. docker-compose编排,gitlab安装和授权,git使用和jenkins安装和使用
  17. Visual Studio 2010 中文旗舰版下载
  18. 夏普数码复印机出灯,灯的解决方法
  19. php中文显示乱码,为什么会出现php中文乱码情况
  20. 「小程序」——————————swiper引入图片不显示解决方案

热门文章

  1. mysql mof提权原理_[原创]WEB安全第六章提权篇12 mof提权
  2. 机器学习集成模型学习——Boosting集成学习(四)
  3. C语言期末成绩计算机平均分,用C语言编程平均分数
  4. 学习笔记:平衡树-splay
  5. Python当前线程休眠1秒钟
  6. Oracle数据库SqlLoad常用技巧总结word版
  7. jQuery操作Table学习总结(转)
  8. LoadRunner性能测试技术培训
  9. [ZT]MSN Messenger的口令获取源代码, MSNMessenger的口令是经过DPAPI加密后保存在注册表中...
  10. c语言头文件_C语言学习之头文件的原理和使用方法