Linux下定时器使用

From: http://blog.csdn.net/gudulyn/article/details/885334


Linux下的定时器有两种,以下分别介绍:

       1、alarm
       如果不要求很精确的话,用 alarm() 和 signal() 就够了
           unsigned int alarm(unsigned int seconds)
       专门为SIGALRM信号而设,在指定的时间seconds秒后,将向进程本身发送SIGALRM信号,又称为闹钟时间。进程调用alarm后,任何以前的alarm()调用都将无效。如果参数seconds为零,那么进程内将不再包含任何闹钟时间。如果调用alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。

       示例:
       #include <stdio.h>
       #include <unistd.h>
       #include <signal.h>

       void sigalrm_fn(int sig)
       {
               /* Do something */
               printf("alarm!/n");

               alarm(2);
               return;
       }

       int main(void)
       {
               signal(SIGALRM, sigalrm_fn);
               alarm(2);

               /* Do someting */
               while(1) pause();
       }


       2、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信号::
      
#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 ", 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);while(1);
} 

        该例子的屏幕拷贝如下:

       localhost:~$ ./timer_test
       process id is 579
       Catch a signal – SIGVTALRM
       Catch a signal – SIGALRM
       Catch a signal – SIGVTALRM
       Catch a signal – SIGVTALRM
       Catch a signal – SIGALRM
       Catch a signal –GVTALRM


       注意:Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,因此,把那些建立在早期机制上的信号叫做"不可靠信号",信号值小于SIGRTMIN(Red hat 7.2中,SIGRTMIN=32,SIGRTMAX=63)的信号都是不可靠信号。这就是"不可靠信号"的来源。它的主要问题是:进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

T-SQL SUM Functions

SQL Server SUM()函数&#xff0c;计算字段值和&#xff0c;不包括NULL值。 下面例子中&#xff0c;计算所有职员薪金总值&#xff1a; 数据源&#xff1a; SQL语句&#xff1a; SELECTSUM([Salary]) AS[Totals]FROM[dbo].[Member]执行结果&#xff1a;

React开发(235):document.body.clientHeight

document.body.clientHeight获取可视化高度

Qt模态界面设置setWindowModality禁止其他界面响应

一、模态与非模态 模态&#xff1a;启动模态界面时&#xff0c;例如弹出对话框强制用户从其他正在进行的业务中聚焦到当前对话框&#xff0c;除了该对话框整个应用程序窗口都无法接受用户响应&#xff0c;无法切换界面&#xff0c;无法切换当前Qt应用。这可以保证用户按照自己…

html定位fix,html 定位fixed

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家&#xff0c;也给大家做个参考。123#sub1{width:50px;height:80px;border:1px solid #dcdcdc;}#sub2{position:fixed;top:250px;right:20px;width:50px;height:80px;border:1px solid #dcdcdc;m…

OpenCV-CL: OpenCL加速计算机视觉技术

大家好&#xff01;我借这篇文章&#xff0c;分享给大家今年计算机视觉领域里的一些令人兴奋不已的最新进展。特别是最新OpenCV&#xff08;当前最流行的计算机视觉库&#xff09;的发布&#xff0c;您的计算机视觉应用程序可以在现代异构计算平台上充分利用CPU和GPU的全部计算…

如何在Microwindows中显示图片和安装字体

From: http://bbs.chinaunix.net/thread-1987116-1-1.html 一、前言Microwindows可以运行在 支持Framebuffer的 32位的 Linux系统上&#xff0c;或者也可以使用著名的 SVGALib[45] 库来进行图形显示。此外&#xff0c;它还被移植到16位的EL KS 和实模式的MSDOS上。Microwindows…

VS2008创建dll,并使用dll

原来一直使用vc6.0做开发&#xff0c;但是公司主要使用vs2008工具&#xff0c;刚开始使用的时候感觉非常不好用&#xff0c;但是一周下来&#xff0c;不禁感叹&#xff0c;还是新的好啊&#xff0c;嘿嘿&#xff01; 这里总结一下vs2008下创建dll并使用dll导出函数的方法&#…

MySQL常用语法记录

0、说明 记录MySQL使用到的常用语法。 1、MySQLDISTINCT唯一 2、MySQLLIMIT限制 3、MySQL ORDER排序升序 4、MySQL DESC降序 5、MySQL WHERE 过滤 6、MySQL 操作符 AND OR ,AND优先级高于OR 7、MySQL IN 8、MySQL NOT 否定之后跟的任何条件 9、MySQL LIKE通配符 可在任意位置…

React开发(245):ant design form自定义验证

<Form.Item label"联系人手机号&#xff1a;">{getFieldDecorator(contactMobile, {initialValue: type update ? activeUpdateData.contactMobile : ,rules: [{ required: true, message: 请输入联系人手机号 },{ pattern: isPhone, message: 手机号格式不…

武汉科技大学计算机转专业吗,武汉科技大学普通本科生专业选择与转专业管理办法...

武科大教〔2018〕28号第一条为了进一步深化教育教学改革&#xff0c;稳步推进学分制和大类培养&#xff0c;为学生提供灵活多样的学习方式&#xff0c;充分调动学生学习的积极性和主动性&#xff0c;促进学生个性化发展&#xff0c;根据《普通高等学校学生管理规定》(教育部令第…

js DOM——JS学习笔记2015-7-2(第73天)

这个是w3cschool上面的简易版教程&#xff0c;虽然简易&#xff0c;但是对整个JS DOM&#xff0c;有个大致的概念&#xff0c;同时引入思维导图这种图表法学习方式&#xff0c;期待更加便于记忆和管理 转载于:https://www.cnblogs.com/zhangxg/p/4615453.html

microwindows位图解析

From: http://blog.csdn.net/bisword/article/details/2740054 第1章 microwinodows图形显示框架 1.1 microwindows体系结构 Microwindows 采用了分层结构设计方法,其层次结构如下图所示。同时, 这里也列出 Microwindows 源代码目录树下的主要目录结构,以便于对照参考。 mic…

jQuery:动态改变html表单的目标页(Target)

看到Rick Strahl的最新博客Changing an HTML Form’s Target with jQuery&#xff0c;读完之后感觉文中给出的解决方案很简单很实用。借鉴原文&#xff0c;断断续续重新整理小结一下&#xff0c;本文最后提供一个简单demo下载&#xff0c;希望对您也有帮助。 1、问题来源 “页面…

花卉网页html,花卉管理系统(数据库+源码)

这是一个入门级示例&#xff0c;实现了花卉的 增加 和 查询功能资源下载此资源下载价格为2D币&#xff0c;请先登录资源文件列表花卉管理系统/FlowerManagerSys/.vs/FlowerManagerSys/v15/.suo , 53248花卉管理系统/FlowerManagerSys/.vs/FlowerManagerSys/v15/Server/sqlite3/…

Qt sqlit3的增、删、改、查、判断等基本操作接口

1、Qt sqlit3简介 Qt SQLite&#xff08;sql&#xff09;是一款不需要服务器的开源轻量级的数据库软件&#xff0c;可以集成在其他软件中&#xff0c;适合嵌入式系统应用。Qt5以上版本直接支持SQLite。具体的特性和语法可以参考RUNOOB. 这里我把自己项目中用到的基本操作函数贴…

ECNUOJ 2143 端午节快乐

端午节快乐 Time Limit:1000MS Memory Limit:65536KBTotal Submit:1720 Accepted:868 Description 有一段有趣的传说。公元前340年&#xff0c;爱国诗人、楚国大夫屈原&#xff0c;面临亡国之痛&#xff0c;于五月五日&#xff0c;悲愤地怀抱大石投汩罗江&#xff0c;为了不使鱼…

Linux下通过命令设置系统时间

Linux下通过命令设置系统时间&#xff1a; date -s "09/22/2012 09:30:30" clock -w

教你看编号选希捷硬盘

对于大部分消费者而言&#xff0c;很多人在选购硬盘时&#xff0c;都会把注意力集中在硬盘的容量上&#xff0c;而近期一些用户也会注意到硬盘的接口&#xff08;IDE或者是SATA&#xff09;等方面&#xff0c;但是&#xff0c;硬盘的性能并不仅仅表示在容量以及接口上&#xff…

一键圣诞帽 html5源码,HTML5在线教程之微信小程序“圣诞帽”的实现思路详解

HTML5在线教程之微信小程序“圣诞帽”的实现思路详解大家应该还记得微信小程序“圣诞帽”吧&#xff0c;在圣诞的那几天可谓是非常的火爆&#xff0c;大家都争相使用&#xff0c;本篇文章小编给大家分享一下微信小程序“圣诞帽”的实现思路详解&#xff0c;对此感兴趣的小伙伴随…