求linux下用c语言编写的定时器程序

求linux下用c语言编写的定时器程序,第1张

 //一个示例程序。

#include<stdlibh>

#include<unistdh>

#include<signalh>

#include<timeh>

#include<sys/timeh>

#define N 100 //设置最大的定时器个数

int i=0,t=1; //i代表定时器的个数;t表示时间,逐秒递增

 

struct Timer //Timer结构体,用来保存一个定时器的信息

{

    int total_time; //每隔total_time秒

    int left_time; //还剩left_time秒

    int func; //该定时器超时,要执行的代码的标志

}myTimer[N]; //定义Timer类型的数组,用来保存所有的定时器

 

void setTimer(int t,int f) //新建一个计时器

{

    struct Timer a;

    atotal_time=t;

    aleft_time=t;

    afunc=f;

    myTimer[i++]=a;

}

 

void timeout() //判断定时器是否超时,以及超时时所要执行的动作

{

    printf("Time: %d\n",t++);

    int j;

    for(j=0;j<i;j++)

    {

       if(myTimer[j]left_time!=0)

           myTimer[j]left_time--;

       else

       {

           switch(myTimer[j]func)

           {      //通过匹配myTimer[j]func,判断下一步选择哪种 *** 作

           case 1:

              printf("------Timer 1: --Hello Aillo!\n");break;

           case 2:

              printf("------Timer 2: --Hello Jackie!\n");break;

           case 3:

              printf("------Timer 3: --Hello PiPi!\n");break;

           }

           myTimer[j]left_time=myTimer[j]total_time; //循环计时

       }

    }

}

 

int main() //测试函数,定义三个定时器

{

    setTimer(3,1);

    setTimer(4,2);

    setTimer(5,3);

    signal(SIGALRM,timeout); //接到SIGALRM信号,则执行timeout函数

   

    while(1)

    {

       sleep(1); //每隔一秒发送一个SIGALRM

       kill(getpid(),SIGALRM);

    }

    exit(0);

}

#include <stdioh>

void delay(unsigned long n) {//延时时间与n有关系,业余你的电脑的运行速度有关,至于延时是否有5秒,请自行调整

unsigned long i,j,k,m = n;

for(i = 0; i < n; ++i)

for(j = 0;j < n; ++j)

for(k = 0;j < n; ++i)

while(m--);

}

void fun() {}

int main() {

unsigned n = 50000;

while(1) {

fun();

delay(n);//延时

}

return 0;

}

将itimerval结构的成员itinterval和成员itvalue均赋值为2秒即可。在C语言中,alarm函数、setitimer函数,这两种定时方式都是通过信号来通知定时到期的,可以通过将itimerval结构的成员itinterval和成员itvalue均赋值为2秒即可。C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发,C语言能以简易的方式编译、处理低级存储器。

中断函数是不需要额外通过代码调用的

当中断条件满足,单片机会打断当前执行的语句,跳转到中断函数,然后执行完中断函数后,再次返回之前被打断的语句继续执行

中断函数中,每次都会对定时器重新初始化,即头两句对TH1和TL1的赋值,这样每50ms会再次进入一次中断函数每20次进入中断,即经过了1秒,然后对全局变量miao自增1

而main函数则是不断对变量miao进行输出

如果是51单片机的话其实很简单的,这里假设晶振频率是12M(一般都是的),你可以选用定时器0,工作在工作状态2,因为这个状态下装入初始值几乎不需要时间,所以定时精确,也就是8位预置数状态,将初始值设为6,这样每次定时就是250微秒,在中断程序中定义一个静态变量,每次中断加一,这样当这个变量值为4000时就刚好是1S钟。

关键程序是:

void main()

{

TMOD=OX02;

EA=1;

ET0=1;

TH0=0X06;

TL0=0X06;

while(1);

}

void timer0() interrupt 1

{

static unsigned int times=0;

times++;

if(times==4000)

{

times=0;

//自己的程序

}}

以上就是关于求linux下用c语言编写的定时器程序全部的内容,包括:求linux下用c语言编写的定时器程序、c语言如何实现定时调用函数、c语言定时器怎么定时两秒等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9462948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存