linux下,实现定时功能

来源:互联网 发布:怎样找淘宝客推广 编辑:程序博客网 时间:2024/05/17 23:56

定时器Timer应用非常广泛,但在linux下,由于不同芯片对应不同晶振速度,导致定时功能实现麻烦,根据自己的经验,罗列下列三种定时方式

1,使用sleep()和usleep()

sleep和usleep函数无疑是实现方式最简单的定时器,但其有几个明显的缺点:

1、sleep函数准确度较低;

2、sleep函数多用于多线程休眠处理,当在多线程中需要进行定时,同时要求多线程执行其他命令(即不想让线程休眠),sleep函数实现起来就非常麻烦

使用方法:直接调用,sleep表示休眠多少秒,usleep表示休眠多少us



2,使用delay()

<span style="font-size:18px;">//简单延时结构—不准 void delay_50ms(uint t){uint j;for(;t>0;t--)for(j=6245;j>0;j--);}//根据晶振确定延时 </span>
既不推荐这种方式实现延时,根据芯片的晶振频率不同,即使是相同的代码段,在不同的程序共,延时差距非常大,而且由于采用的实现方式是占用程序资源,所以对CPU的消耗也较大,极不推荐这种方式


3,使用signal()和alarm()

这种方式是利用SIGALRM 信号实现,精度能达到1秒,首先注册信号量SIGALRM处理函数,调用alarm(),设置定时长度,代码如下:

#include <stdio.h>#include <signal.h>#include <unistd.h>void timer(int sig){if(SIGALRM == sig){printf("timer\n");//alarm(5);}return ;}  int main() { int i; signal(SIGALRM,timer); alarm(5);for(i=1;i<21;i++){printf("sleep %d ...\n",i);sleep(1);}// alarm(2);//for(i=1;i<21;i++)//{//printf("sleep %d ...\n",i);//sleep(1);//} return 0; } 



0 0
原创粉丝点击