介绍计数器 定时器 程序 的编写步骤 (C语言的)

介绍计数器 定时器 程序 的编写步骤 (C语言的),第1张

注意:

多数C语言编译器不支持多线程,而且ANSI C也没有线程库,因此C语言无法实现实际意义上的定时器(即包含触发机制的定时器)。

回到本问题:

1 计数器

简单的int变量(一般为全局或相对全局)就可以实现。

2 计时器:

包含timeh,使用clock相关函数,通过运行时间差来实现计时功能。示例:

/@/ clock_t startstart = clock();

……

/@/ clock_t endend = clock();

float start2end = (float)(endend-startstart)/CLOCKS_PER_SEC;

// 这里的start2end就是时间差

3 定时器

使用系统API,比如Windows下的Sleep()函数(注意,是大写),原型如下:

VOID Sleep(

DWORD dwMilliseconds // sleep time in milliseconds

);

 //一个示例程序。

#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);

}

以上就是关于介绍计数器 /定时器 程序 的编写步骤 (C语言的)全部的内容,包括:介绍计数器 /定时器 程序 的编写步骤 (C语言的)、求linux下用c语言编写的定时器程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存