1.alarm()运行后,进程将继续运行。在后期(alarm以后)的运行过程中将会在seconds秒后收到信号SIGALRM并运行其处理函数。

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
void sigalrm_fn(int sig)
{printf("alarm!\n");alarm(2);return;
}
int main(void)
{signal(SIGALRM, sigalrm_fn);alarm(1);while(1) pause();
}

2.alarm定时器,可是仅仅能精确到秒,然而我们假设须要用到更精准的定时器能够用setitimer
 int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue));
 setitimer()比alarm功能强大,支持3种类型的定时器:
    ITIMER_REAL :     以系统真实的时间来计算。它送出SIGALRM信号。
    ITIMER_VIRTUAL : -以该进程在用户态下花费的时间来计算。它送出SIGVTALRM信号。
    ITIMER_PROF :     以该进程在用户态下和内核态下所费的时间来计算。它送出SIGPROF信号。
    setitimer()第一个參数which指定定时器类型(上面三种之中的一个)。第二个參数是结构itimerval的一个实例;第三个參数可不做处理。

setitimer()调用成功返回0。否则返回-1。

以下是关于setitimer调用的一个简单示范,在该样例中,每隔一秒发出一个SIGALRM。每隔0.5秒发出一个SIGVTALRM信号:[code=C/C++]

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <sys/time.h>
int sec;
void sigroutine(int signo){switch (signo){case SIGALRM:printf("Catch a signal -- SIGALRM \n");signal(SIGALRM, sigroutine);break;case SIGVTALRM:printf("Catch a signal -- SIGVTALRM \n");signal(SIGVTALRM, sigroutine);break;}return;
}
int main()
{struct itimerval value, ovalue, value2;          sec = 5;printf("process id is %d\n", getpid());signal(SIGALRM, sigroutine);signal(SIGVTALRM, sigroutine);value.it_value.tv_sec = 1;value.it_value.tv_usec = 0;value.it_interval.tv_sec = 1;value.it_interval.tv_usec = 0;setitimer(ITIMER_REAL, &value, &ovalue); value2.it_value.tv_sec = 0;value2.it_value.tv_usec = 500000;value2.it_interval.tv_sec = 0;value2.it_interval.tv_usec = 500000;setitimer(ITIMER_VIRTUAL, &value2, &ovalue);for(;;);
}

setitimer不会引起线程的堵塞、也不会引起线程的切换动作,就是简单的启动一个定时器,開始定时。并且这样的定时应该是基于内核的。(windwos的settimer是基于一种消息的模型)。setitimer尽管有三种类型ITIMER_REAL,ITIMER_VIRTUAL ITIMER_PROF,可是在同一时间同一进程。一种类型的仅仅能有1个setitimer。

Linux下的定时器相关推荐

  1. linux下实现定时器,在Linux操作系统下实现定时器简介

    在Linux实现一个定时器,不像Win32下那样直观.在Win32调用SetTimer就行了,在Linux下则没有相应函数可以直接调用.定时器作为一个常用的功能,在Linux当然也有相应实现.下面我们 ...

  2. linux定时器跑命令,linux下运行定时器(cron/centos/js脚本)

    目的:在centos 6.5系统上定时运行casperjs脚本. 1.启动定时器 要实现目的,首先要可以在centos上运行定时任务,百度后知道有个cron的东西存在,所以第一步就是启动定时器服务(以 ...

  3. linux系统中定时器使用方法,Linux下实现定时器Timer的几种方法

    使用sleep()和usleep() 其中sleep精度是1秒,usleep精度是1微妙,具体代码就不写了.使用这种方法缺点比较明显,在Linux系统中,sleep类函数不能保证精度,尤其在系统负载比 ...

  4. linux 定时器 jiffies,linux下jiffies定时器和hrtimer高精度定时器(示例代码)

    一.jiffies定时器,HZ=100,精度只能达到10ms. 注:采用jiffies+msecs_to_jiffies(xx ms);可做到ms级,不过精度不够 #include //DO--> ...

  5. Linux下定时器使用

    From: http://blog.csdn.net/gudulyn/article/details/885334 Linux下的定时器有两种,以下分别介绍: 1.alarm        如果不要求 ...

  6. Linux两种定时器

    Linux下的定时器有两种,以下分别介绍: 1.alarm 如果不要求很精确的话,用alarm()和signal()就够了 unsigned int alarm(unsigned int second ...

  7. linux定时器错误使用,linux下定时器的使用

    Linux下定时器的使用主要用到两个函数:setitimer()和getitimer(); 注意:setitimer()一个进程中只能有一个,下一个会覆盖前一个的定时. Linux系统给每个进程提供了 ...

  8. linux 多个定时器,timer: 一个Linux下的超级精简的多重定时器:可实现成千上万个定时任务,定时精度可达纳秒级别,且同一时间点可添加不同的任务!适用于云后台服务和嵌入式等各种环境。...

    MT_Timer(MT译为Multiple或Multi) 一.介绍 一个Linux下的超级简洁的定时器:利用epoll机制和timerfd新特性实现的多重.多用.多个定时任务实现.只需要使用TIMER ...

  9. Linux下的微秒级定时器: usleep, nanosleep, select, pselect

    Linux下的微秒级定时器: usleep, nanosleep, select, pselect 标签: linuxnulldelaystructdate 2012-02-07 23:29 4979 ...

最新文章

  1. python利用WMI监控windows状态如CPU、内存、硬盘
  2. Android图像处理整理
  3. 给普通用户赋予docker权限
  4. 【DBMS 数据库管理系统】数据库 -> 数据仓库 ( 数据处理类型 | 传统数据库 | 数据库不适用于分析型应用 )
  5. 表单提交时submit验证非空return false没用_开发这样一个复杂的表单你需要用多久...
  6. 决策树——信息熵的学习笔记
  7. php安装sg11扩展,Centos下安装SG11加密扩展插件
  8. GoldenGate 常见错误分析(二)
  9. Django项目 BBS论坛
  10. C语言练手项目--C 语言编写聊天室
  11. 多商户酒店预订小程序PMS管理系统成品源码
  12. 商用密码数字证书合格检测工具
  13. 流程和企业成熟度模型(PEMM)
  14. Android快速入门之使用AdapterView展示不同风格的列表
  15. 自考启示,关于不紧急重要到紧急重要的改变
  16. ssb的matlab仿真,单边带调制(SSB调制)的理论基础和MATLAB仿真
  17. [转自老马的文章]用MODI OCR 21种语言
  18. 美团即时零售的优势不止“快”
  19. P6225 [eJOI2019] 异或橙子
  20. 利用pandas模块实现excel多行文本合并

热门文章

  1. 工作实战: 让 SQL 飞起来
  2. python--一些特性
  3. GIT提交记录和Revert commit过程分析
  4. spring事务管理中,用try-catch处理了异常,事务也会回滚?
  5. nasm实现的用vmware运行自做的linux启动盘的引导代码
  6. 听说Mutex源码是出名的不好看,我不信,来试一下
  7. vc范例-操作mysql数据库_VC范例-操作MySQL数据库
  8. springcloud是如何进行服务治理的
  9. Java 常用缓存淘汰算法解析
  10. mongodb聚合操作之group