三种不同精度的睡眠

1.sleep

#include <unistd.h>
unsigned int sleep(unsigned int seconds);

RETURN VALUE

Zero if the requested time has elapsed, or the number of seconds left to  sleep,

if  the call was interrupted by a signal handler.

//示例
int sleepTime = 5;
do
{sleepTime = sleep(sleepTime);
}
while (sleepTime > 0);

2.usleep(以微秒为单位)

int usleep(useconds_t usec);

The  type useconds_t is an unsigned integer type capable of holding integers in the range [0,1000000].

Programs will be more portable if they never mention this type  explicitly.

3.nanosleep(以纳秒为单位)

#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);

req指定睡眠的时间, rem返回剩余的睡眠时间

struct timespec
{time_t tv_sec;        /* seconds: 秒 */long   tv_nsec;       /* nanoseconds: 纳秒 */
};

三种时间结构

time_t
struct timeval {long    tv_sec;         /* seconds */long    tv_usec;        /* microseconds 微秒*/
};
struct timespec {time_t tv_sec;        /* seconds */long   tv_nsec;       /* nanoseconds */
};

setitimer

#include <sys/time.h>
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));

setitimer()比alarm功能强大,支持3种类型的定时器

参数

第一个参数which指定定时器类型

第二个参数是请求的时间

第三个参数是定时器原来所关联的值

struct itimerval
{struct timeval it_interval; /* next value : 产生信号的间隔时间*/struct timeval it_value;    /* current value : 第一次产生信号的时间*/
};
struct timeval
{time_t      tv_sec;         /* seconds: 秒 */suseconds_t tv_usec;        /* microseconds: 微秒 */
};

which值

ITIMER_REAL: 经过指定的时间后,内核将发送SIGALRM信号给本进程 (用的较多)

ITIMER_VIRTUAL : 程序在用户空间执行指定的时间后,内核将发送SIGVTALRM信号给本进程

ITIMER_PROF : 进程在内核空间中执行时,时间计数会减少,通常与ITIMER_VIRTUAL共用,代表进程在用户空间与内核空间中运行指定时间后,内核将发送SIGPROF信号给本进程。

/**示例1:
1.在启动进程的5秒之后产生信号
2.然后每隔1秒产生一次信号
**/
int main()
{if (signal(SIGALRM, signalAction) == SIG_ERR)err_exit("signal error");struct itimerval it;struct timeval it_interval = {1, 0};struct timeval it_value = {5, 0};it.it_interval = it_interval;it.it_value = it_value;if (setitimer(ITIMER_REAL, &it, NULL) == -1)err_exit("setitimer error");while (true)pause();
}
/**示例2:
获取itimerval 结构体
**/
int main()
{struct itimerval it;struct timeval it_interval = {1, 0};struct timeval it_value = {5, 0};it.it_interval = it_interval;it.it_value = it_value;if (setitimer(ITIMER_REAL, &it, NULL) == -1)err_exit("setitimer error");for (int i = 0; i < 100000; ++i);struct itimerval oldIt;//    if (setitimer(ITIMER_REAL, &it, &oldIt) == -1)
//        err_exit("setitimer error");// 在不重新设置时钟的情况下获取剩余时间if (getitimer(ITIMER_REAL, &oldIt) == -1)err_exit("getitimer error");cout << oldIt.it_interval.tv_sec << ' ' << oldIt.it_interval.tv_usec<< ' ' << oldIt.it_value.tv_sec << ' ' << oldIt.it_value.tv_usec << endl;
}

附:秒-微秒-纳秒的转换

S(秒)、ms(毫秒)、μs(微秒)、ns(纳秒),其中:1s=1000ms,1 ms=1000μs,1μs=1000ns

Linux信号实践(5) --时间与定时器相关推荐

  1. Linux信号实践(2) --信号分类

    信号分类 不可靠信号 Linux信号机制基本上是从UNIX系统中继承过来的.早期UNIX系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是: 1.进程每次处理信号后,就将对信号 ...

  2. Linux信号实践(4) --可靠信号

    Sigaction #include <signal.h> int sigaction(int signum, const struct sigaction *act,struct sig ...

  3. Linux信号实践(1) --Linux信号编程概述

    中断 中断是系统对于异步事件的响应, 进程执行代码的过程中可以随时被打断,然后去执行异常处理程序; 计算机系统的中断场景:中断源发出中断信号 -> CPU判断中断是否屏蔽屏蔽以及保护现场 -&g ...

  4. Linux信号实践(3) --信号内核表示

    信号在内核中的表示 执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending).进程可以选择阻塞(Block)某个信号.被阻塞的信号产生时将保持在未 ...

  5. linux上点时间延时,Linux上时间和定时器

    Linux下时间和定时器 http://blog.chinaunix.net/u1/35065/showart_1870601.html重点读了第三种方法.文章写得很好,加了一点点注释可参考http: ...

  6. linux 时间与定时器编程原理,浅析 Linux 中的时间编程和实现原理-嵌入式-火龙果软件工程...

    引子 我们都生活在时间中,但却无法去思考它.什么是时间呢?似乎这是一个永远也不能被回答的问题.然而作为一个程序员,在工作中,总有那么几次我必须思考什么是时间.比如,需要知道一段代码运行了多久:要在 l ...

  7. linux信号子系统,Linux时间子系统之(三):用户空间接口函数

    Linux时间子系统之(三):用户空间接口函数 作者:linuxer 发布于:2014-12-24 15:48 分类:时间子系统 一.前言 从应用程序的角度看,内核需要提供的和时间相关的服务有三种: ...

  8. Linux时间、定时器、时间中断超时处理

    内核时间管理 Linux内核计时.延时函数与内核定时器 内核通过定时器(timer)中断来跟踪时间流 硬件定时器以周期性的间隔产生时间中断,这个间隔(即频率)由内核根据HZ来确定,HZ是一个与体系结构 ...

  9. linux信号(signal) 机制分析

    1       信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的. ...

最新文章

  1. ubuntu-18.04 root登录图形界面失败问题解决方案
  2. 使用Cucumber+Rspec玩转BDD(7)——测试重构
  3. html 静态资源缓存时间,.htaccess设置静态资源缓存(即浏览器缓存)
  4. python中dump用法_python中json庫中的load、loads、dump、dumps的區別與用法
  5. [wp7游戏]wp7~~超级血腥类游戏~~集合贴~~
  6. 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作 #华为云·寻找黑马程序员#
  7. dedecms 5.7 站点文件从本地子目录上传到远程根目录后找不到模板的解决方案
  8. 保护计算机系统与数据有什么方法,电脑数据保护方法 看完保你不后悔
  9. 广日电梯主板灯说明_广日MAX电梯维修手册.pdf
  10. 加密的PDF文件如何解密?教你使用手机就能解密的方法
  11. Nginx服务器上安装SSL证书
  12. Tomcat访问localhost:8080直接跳转到项目首页
  13. 美女联系网站作者删除之前的写真照
  14. 《一周学完光线追踪》学习 十一点五 离焦模糊代码原理分析
  15. Opencv中BGR、YUV、YUV_I420\NV12分析
  16. 一篇博客教会你写序列化工具
  17. 脑裂是什么,zk是如何解决脑裂问题的
  18. 博世BOSCH EDI DESADV发货通知详解
  19. FD650B数码管驱动
  20. 汇编 SHL指令和SHR指令

热门文章

  1. KVM 虚拟机 调整内存与CPU
  2. 三、处理机调度与死锁
  3. Wix 安装部署(二)自定义安装界面和行为
  4. 禁用ohmyzsh自动更新
  5. s2sh删掉原本的s2sh project capabilities后重新添加它们
  6. paper reading in this week
  7. myeclipse显示行号
  8. 深度学习高能干货:手把手教你搭建MXNet框架
  9. 凭什么老程序员被裁,应届生却能月薪 1.3 万?
  10. 任正非:不向美国人民学习他们的伟大,就永远战胜不了美国