定时器

你的付出的努力越多,得到的越多。你盖好了,他们就来了。

1. 定时器概念

      定时器是进程规划自己在未来某一时刻接获通知的一种机制;定时器的调度及精度取决于当前负载和对进程的调度,系统可能会在定时器到期的瞬间(通常是几分之一秒)之后才去调用所属进程。

2. 使用UNIX API实现的定时器

  • 代码示例

     	#include<sys/time.h>
     	#include<stdio.h>
     	#include<string.h>
     	#include<signal.h>
     	static int count = 0;
     	
     	static void sigAlarmHander(int sig)
     	{
     		printf("count = %d\n",count);
     		count++;
     		fflush(stdout);
     	}
     	int main()
     	{
     		int s;
     		struct itimerval timerVal;
     		struct sigaction sa;
     		
     		sigemptyset(&sa.sa_mask);
     		sa.sa_flags = 0;
     		sa.sa_handler = sigAlarmHander;
     		
     		
     		//周期性执行,执行周期间隔数
     		timerVal.it_interval.tv_sec = 10;
     		timerVal.it_interval.tv_usec = 0;
     		
     	    //定时器第一次生效的时间间隔
     		timerVal.it_value.tv_sec = 6;
     		timerVal.it_value.tv_usec = 0;
     		
     		//创建定时器
     		s = setitimer(ITIMER_REAL,&timerVal,NULL); 
     		if(s != 0)
     		{
     			printf("create timer fail!");
     			return -1;
     		}
     		
     		s = sigaction(SIGALRM,&sa,NULL); //捕获定时器发送的信号
     		if(-1 == s)
     		{
     			printf("create sig action fail!");
     			return -1;
     		}
     		while(1);
     		return 0;
     	}
    
  • 执行时间间隔图
    在这里插入图片描述

  • 调用alarm()实现定时执行(只执行一次)

      	#include<unistd.h>
      	#include<signal.h>
      	#include<stdio.h>
      	
      	static int count = 0;
      	static void sigAlarmHander(int sig)
      	{
      		printf("count = %d\n",count);
      		count++;
      		fflush(stdout);
      	}
      	int main()
      	{
      		struct sigaction sa;
      		int s;
      		sigemptyset(&sa.sa_mask);
      		sa.sa_flags = 0;
      		sa.sa_handler = sigAlarmHander;
      		s = sigaction(SIGALRM,&sa,NULL); //捕获定时器发送的信号
      		if(-1 == s)
      		{
      			printf("create sig action fail!");
      			return -1;
      		}
      		alarm(2);
      		while(1);
      		return 0;
      	}
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值