setitimer 定時函式

2021-06-07 09:04:26 字數 2566 閱讀 8394

setitimer()為linux的api,並非c語言的standard library.

setitimer()有兩個功能,一是指定一段時間後,才執行某個function,二是每間格一段時間就執行某個function.

以下程式demo如何使用setitimer()。

view plaincopy to clipboardprint?

/* 

filename    : timer.cpp 

compiler    : gcc 4.1.0 on fedora core 5 

description : setitimer() set the interval to run function 

synopsis    : #include

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue); 

struct itimerval ; 

struct timeval              

release     : 11/25/2006 

*/ #include // for printf() 

#include // for pause() 

#include // for signal() 

#include // for memset() 

#include // struct itimeral. setitimer()  

void printmsg(int);  

int main()   

// always sleep to catch sigalrm signal  

while(1)   

return 0;    

}  

void printmsg(int num)  

filename    : timer.cpp

compiler    : gcc 4.1.0 on fedora core 5

description : setitimer() set the interval to run function

synopsis    : #include

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

struct itimerval   

struct itimerval v;         //定時器結構體  

time_count=10;               //再次初始化  

signal(sigalrm, sigalrm_handler);//繫結訊號函式  

v.it_value.tv_sec=1;   

v.it_value.tv_usec=0;   

v.it_interval.tv_sec=1;//間隔1s  

v.it_interval.tv_usec=0;          

setitimer(itimer_real,&v,null); //結構體關聯,start  

...  

...  

//*****====結束此定時器********************=  

v.it_value.tv_sec=0;   

v.it_value.tv_usec=0;   

v.it_interval.tv_sec=0;   

v.it_interval.tv_usec=0;      

setitimer(itimer_real,&v,null);   

#include

#include

static int time_count=30;

static void sigalrm_handler(int sig)

struct itimerval v;         //定時器結構體

time_count=10;               //再次初始化

signal(sigalrm, sigalrm_handler);//繫結訊號函式

v.it_value.tv_sec=1;

v.it_value.tv_usec=0;

v.it_interval.tv_sec=1;//間隔1s

v.it_interval.tv_usec=0;  

setitimer(itimer_real,&v,null); //結構體關聯,start

......

//*****====結束此定時器********************=

v.it_value.tv_sec=0;

v.it_value.tv_usec=0;

v.it_interval.tv_sec=0;

v.it_interval.tv_usec=0; 

setitimer(itimer_real,&v,null);

原理既是 1s傳送sigalrm訊號一次,將其值置零即為關閉,不在傳送訊號

setitimer定時函式

setitimer函式功能介紹 在linux下如果定時如果要求不太精確的話,使用alarm 和signal 就行了,但是如果想要實現精度較高的定時功能的話,就要使用setitimer函式 int setitimer int which,const struct itimerval value,str...

linux中定時器 setitimer

參考文件 1 2 3 在參考文獻 1 中提到了 在linux下如果定時如果要求不太精確的話,使用alarm 和signal 就行了 精確到秒 但是如果想要實現精度較高的定時功能的話,就要使用setitimer函式。因為我一開始就查的是setitimer函式,所以這裡先介紹下這個函式吧。一 函式原型 ...

linux中setitimer函式用法

一 函式原型 引數 which 間歇計時器型別,有三種選擇 itimer real 數值為0,計時器的值實時遞減,傳送的訊號是sigalrm。itimer virtual 數值為1,程序執行時遞減計時器的值,傳送的訊號是sigvtalrm。itimer prof 數值為2,程序和系統執行時都遞減計時...