问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-22 16:49

我来回答

2个回答

热心网友 时间:2023-05-26 01:35

 //一个示例程序。
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<time.h>
#include<sys/time.h>
#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;
    a.total_time=t;
    a.left_time=t;
    a.func=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);
}

追问有没有基于链表的?

热心网友 时间:2023-05-26 01:35

定时器就相当于系统每隔一段时间给进程发一个定时信号。

在linux里面有一种进程中信息传递的方法,那就是信号,定时器程序就是需要定义一个信号处理函数。利用定时器产生的一个信号SIGALRM信号,在收到该信号同时会调用do_alarm函数。这也就类似单片机的定时中断,当定时到了,就跳到中断服务函数里去执行相应的程序。  

Linux操作系统为每一个进程提供了3个内部间隔计时器. 

ITIMER_REAL:减少实际时间.到时的时候发出SIGALRM信号.  

ITIMER_VIRTUAL:减少有效时间(进程执行的时间).产生SIGVTALRM信号.  

ITIMER_PROF:减少进程的有效时间和系统时间(为进程调度用的时间).这个经常和上面一个使用用来计算系统内核时间和用户时间.产生SIGPROF信号. 

代码如下:

#include <stdio.h>  
#include <time.h>  
#include <sys/time.h>  
#include <stdlib.h>  
#include <signal.h>  
  
static int count = 0;  
static struct itimerval oldtv;  
  
void set_timer()  
{  
    struct itimerval itv;  
    itv.it_interval.tv_sec = 1;  
    itv.it_interval.tv_usec = 0;  
    itv.it_value.tv_sec = 1;  
    itv.it_value.tv_usec = 0;  
    setitimer(ITIMER_REAL, &itv, &oldtv);  
}  
  
void signal_handler(int m)  
{  
    count ++;  
    printf("%d\n", count);  
}  
  
int main()  
{  
    signal(SIGALRM, signal_handler);  
    set_timer();  
    while(count < 10000);  
    exit(0);  
    return 1;  
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑屏保息屏时间设置怎么设置电脑几分钟自动锁屏时间 如何设置电脑三分钟锁屏怎么设置电脑几分钟自动锁屏时间 为什么CF玩一段时间ping好高 关于CFping高的问题 抖音免费蓝v是永久的吗?需要什么条件? 求皮卡堂金冠。女号跪求啦!要钱很多很多。衣服很多很多。要发35级以 ... 3a证书多少钱一套 成人教育都包括什么 成人教育有哪几种形式 成人教育包括哪些 C语言定时器 求单片机定时器简单程序(C语言)详解。不胜感激~ C语言定时器,例如过了60秒开始执行程序,注释 c语言 定时器 怎么用C语言编定时器? C语言的定时器 请问单片机C语言定时器程序怎么写? vivox30屏幕刷新率是九十赫兹pro版为什么是六十赫兹? 举头望明月,低头思故乡是猜是什么动物 举头望明月低头思故乡,猜一动物 美女家乡猜什么生肖? 梦回故乡,打一动物? 热爱家乡什么动物? 新年有关于的家乡谜语。 清明时节思念父母诗句 陆游与唐婉都写了《钗头凤》,请分别对两首词进行赏析。 崤扈鐚读什么? 古人所说的“五大三粗”到底是说什么意思? 华为mate30Pro换内屏多少钱? 万山丛林是故乡打一动物 单片机定时器控制电子门铃c语言程序 VC中的定时器(C语言) C语言控制台程序,如何实现定时器 单片机定时器中断程序,C语言程序设计 单片机C语言定时器如何调用 介绍计数器 /定时器 程序 的编写步骤 (C语言的) 大连大商都是每年什么时候店庆? 北京翠微店庆2021时间 商场什么时候会打折?? 杭州各大商场店庆时间,店庆和元旦哪个打折利度大 北京新世界百货商场(崇文门店)10周年店庆有什么活动 北京各大商场的店庆日 今年王府中环购物中心店庆有什么优惠活动吗? 百货商场十年店庆,在线急等祝福语 咸宁百货商场迎来64年店庆,主营哪些物品?其销量最好的是哪些? 商场八周年庆主题怎么命名? 商场三周年店庆鼠年祝福语? 涓这个字怎么读,涓怎么念,涓怎么拼音,涓怎么组词 商场店庆前应早会应给员工讲什么内容 商场七周年店庆广告语