linux c 定時器

定時器是咱們須要常常處理的一種資源。那linux下面的定時器又是怎麼一回事呢?其實,在linux裏面有一種進程中信息傳遞的方法,那就是信號。這裏的定時器就至關於系統每隔一段時間給進程發一個定時信號,咱們所要作的就是定義一個信號處理函數。linux

在這以前,先看linux中定義好的一個結構體:struct itimerval;api

struct itimerval {//結構體中又包含結構體timeval函數

struct timeval it_interval;//表示時間間隔,包括秒和微妙教程

struct timeval it_value;   //表示第一次定的時間,也包括秒和微妙, 這個時間爲0後,會把上一個時間賦給他,已達到循環的目的,若是進程

//不需循環,則it_intval的秒和微妙都設爲0;資源

};get

struct timeval {it

long tv_sec;   //表示秒io

long tv_usec;   //表示微妙class

};

看完上面兩個結構體後,還需知道一個linux的信號函數signal(信號種類,函數); 本例中,定時器(由於設定爲了ITIMER_REAL)時間到了會發出一個SIGALRM信號,接收到此信號,會引起函數動做

#include <stdio.h>  
#include <time.h>  
#include <sys/time.h> //
包含setitimer()函數
#include <stdlib.h>  
#include <signal.h> 
//包含signal()函數
static int count = 0;  
static struct itimerval oldtv;  
void set_timer()  
{  
  struct itimerval itv;  
  itv.it_interval.tv_sec = 1;  設置爲1秒
  itv.it_interval.tv_usec = 0;  
  itv.it_value.tv_sec = 1;  
  itv.it_value.tv_usec = 0;  
  setitimer(ITIMER_REAL, &itv, &oldtv);  //此函數爲linux的api,不是c的標準庫函數
}  
void signal_handler(int m)  
{  
  count ++;  
  printf("%d\n", count);  
}  
int main()  
{  
  signal(SIGALRM, signal_handler);  //註冊當接收到SIGALRM時會發生是麼函數;
  set_timer();  //啓動定時器,
  while(count < 10000);  
  exit(0);  
  return 1;  
}
相關文章
相關標籤/搜索