linux定时器详解讲解.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux定时器详解讲解

查看文章 Linux 定时器设置(一)2010-04-12 17:07定时器设置 函数alarm设置的定时器只能精确到秒,而以下函数理论上可以精确到微妙: #include sys/select.h #include sys/time.h int getitimer(int which, struct itimerval *value); int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue); 函数setitimer可以提供三种定时器,它们相互独立,任意一个定时完成都将发送定时信号到进程,并且自动重新计时。参数which确定了定时器的类型,如表10-6所示:表10-6 参数which与定时器类型取值 含义 信号发送 ITIMER_REAL 定时真实时间,与alarm类型相同。 SIGALRM ITIMER_VIRT 定时进程在用户态下的实际执行时间。 SIGVTALRM ITIMER_PROF 定时进程在用户态和核心态下的实际执行时间。 SIGPROF 这三种定时器定时完成时给进程发送的信号各不相同,其中ITIMER_REAL类定时器发送SIGALRM信号,ITIMER_VIRT类定时器发送SIGVTALRM信号,ITIMER_REAL类定时器发送SIGPROF信号。函数alarm本质上设置的是低精确、非重载的ITIMER_REAL类定时器,它只能精确到秒,并且每次设置只能产生一次定时。函数setitimer设置的定时器则不同,它们不但可以计时到微妙(理论上),还能自动循环定时。 在一个Unix进程中,不能同时使用alarm和ITIMER_REAL类定时器。结构itimerval描述了定时器的组成: struct itimerval { struct tim. it_interval; /* 下次定时取值 */ struct tim. it_value; /* 本次定时设置值 */} 结构tim.描述了一个精确到微妙的时间: struct tim. { long tv_sec; /* 秒(1000000微秒) */ long tv_usec; /* 微妙 */}函数setitimer设置一个定时器,参数value指向一个itimerval结构,该结构决定了设置的定时器信息,结构成员it_value指定首次定时的时间,结构成员it_interval指定下次定时的时间。定时器工作时,先将it_value的时间值减到0,发送一个信号,再将it_value赋值为it_interval的值,重新开始定时,如此反复。如果it_value值被设置为0,则定时器停止定时;如果it_value值不为0但it_interval值为0,则定时器在一次定时后终止。函数setitimer调用成功时返回0,否则返回-1,参数ovalue如果不为空,返回上次的定时器状态。函数getitimer获取当前的定时器状态,整型参数which指定了读取的定时器类型,参数value返回定时器状态。函数调用成功返回0,否则返回-1。 例1. 设置一个定时器,每2.5秒产生一个SIGALRM信号。答:将itimerval结构的成员it_interval和成员it_value均赋值为2.5秒即可:struct itimerval value;value.it_value.tv_sec=2;value.it_value.tv_usec=500000;value.it_interval.tv_sec=2;value.it_interval.tv_usec=500000;setitimer(ITIMER_REAL, value, NULL);函数setitimer设置的定时器可以重复定时,无需多次调用。例2. 设置一个定时器,进程在用户态下执行1秒钟后发出首次信号,以后进程每在用户态下执行3秒钟,发送一个信号。答:将itimerval结构的成员it_value均赋值为1秒,成员it_interval赋值为3秒即可:struct itimerval value;value.it_value.tv_sec=1;value.it_value.tv_usec=0;value.it_interval.tv_sec=3;value.it_interval.tv_usec=0;setitimer(ITIMER_VIRT, value, NULL);例3. 取消一个ITIMER_PROF类定时器。答:将itimerval结构的成员it_valu

文档评论(0)

22ffbqq + 关注
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档