资讯详情

Linux 定时器使用

Linux 下可以使用 alarm 函数或 setitimer 函数设置定时器。alarm 定时器是以 秒计时的,setitimer 定时器可以准确到 微秒

一、alarm 定时器

alarm 当定时器指定的时间到达时,可以在过程中设置定时器,并将其发送到过程中SIGALRM信号。如果采用默认方式,可以设置忽略或不捕获此信号,其行为将终止调用alarm函数的过程。

#include <unistd.h>  unsigned int alarm(unsigned int seconds); 

seconds:指定秒数 成功:如果调用此alarm() 之前,过程中设置了闹钟时间,然后返回上一个闹钟时间的剩余时间,否则返回0 失败:-1

#include <stdio.h> #include <unistd.h> #include <signal.h>  void sigHandFun(int signum) { 
          printf("3秒时间到...\n"); }  int main(int argc, char const *argv[]) { 
          if (SIG_ERR == signal(SIGALRM, sigHandFun)) { 
           perror("signal");   return -1;  }   alarm(3);  printf("启动定时器,计时3秒...\n");   pause(); //SIGALRM 信号处理函数返回后,pause 立即返回   return 0; } 

二、setitimer 定时器

#include <sys/time.h>  int setitimer(int which, const 
       
        struct 
        itimerval 
        *new_value
        , 
        struct 
        itimerval 
        *old_value
        )
        ; 
       

which: 为定时器类型,setitimer支持3种类型的定时器:

  • ITIMER_REAL: 定时器值实时递减,发生的信号为 SIGALRM (常用)
  • ITIMER_VIRTUAL: 进程执行时递减定时器的值,发送的信号为 SIGVTALRM
  • ITIMER_PROF: 进程和系统执行时都递减定时器的值,发送的信号为 SIGPROF

new_value: 设置定时时长,和指定 多长时间后启动定时器 old_value:记录上一次的定时设置,不用 传NULL 成功返回 0,否则返回 -1

struct itimerval { 
        
		struct timeval it_interval; /* 定时时长 */
		struct timeval it_value;    /* 启动时间 */
};

struct timeval { 
        
		time_t      tv_sec;         /* 秒 */
		suseconds_t tv_usec;        /* 微秒 */
};

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>

void sigHandFun(int signum)
{ 
        
	static int n = 0;

	n++;
	if (2000 == n) { 
        
		printf("1秒时间到...\n");
	}
}

int main(int argc, char const *argv[])
{ 
        
	struct itimerval itv;

	//信号处理
	if (SIG_ERR == signal(SIGALRM, sigHandFun)) { 
        
		perror("signal");
		return -1;
	}

	//设置定时时长: 0.5ms
	itv.it_interval.tv_sec  = 0;
	itv.it_interval.tv_usec = 500;

	//设置启动时间: 1秒后启动
	itv.it_value.tv_sec  = 1;
	itv.it_value.tv_usec = 0;

	//设置定时器
	if (-1 == setitimer(ITIMER_REAL, &itv, NULL)) { 
        
		perror("setitimer");
		return -1;
	}

	while(1);	
	return 0;
}

标签: itv液压螺旋连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司