剛好寫程序的時候要使用定時器,就是定時的做一些操作,網上查了一下,自己也學著寫了寫,網上倒是說的好多種,我在這里就不做過多介紹了,就說我用的這個,使用
setitimer函數。
函數原型
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
參數說明
參數which
參數 which是定時器類型
取值
|
含義
|
信號發送
|
ITIMER_REAL
|
定時真實時間,與alarm類型相同。
|
SIGALRM
|
ITIMER_VIRT
|
定時進程在用戶態下的實際執行時間。
|
SIGVTALRM
|
ITIMER_PROF
|
定時進程在用戶態和核心態下 的實際執行時間。
|
SIGPROF
|
這三種定時器定時完成時給進程發送的信號各不相同,其中ITIMER_REAL類定時器發送SIGALRM信號,ITIMER_VIRT類定時器發送SIGVTALRM信號,ITIMER_PROF類定時器發送SIGPROF信號。
參數 value
結構itimerval描述了定時器的組成。
1 struct itimerval
2 {
3 struct timeval it_interval; /* 下次定時取值 */
4 struct timeval it_value; /* 本次定時設置值 */
5 }
6
結構timeval描述的是精確到微秒的結構。
1 struct timeval
2 {
3 long tv_sec; /* 秒(1000000微秒) */
4 long tv_usec; /* 微妙 */
5 }
6
itimerval結構中的it_value是代表首次定時的時間,而it_interval代表下一次定時的時間,執行完第一次之后,it_interval中的時間會賦值給it_value,周而復始。如果it_value值被設置為0,則定時器停止定時;如果it_value值不為0但it_interval值為0,則定時器在一次定時后終止。
setitimer執行成功返回0,否則返回-1
參數ovalue
該參數可以使用空值NULL,如果不為空的話,返回的是上一個時刻的定時器狀態。
下面寫的一個簡單的例子程序。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <signal.h>
5 #include <time.h>
6 #include <sys/time.h>
7
8 int n=0;
9 void doAction(int sig)//你要做的事情
10 {
11 printf("讓一切痛苦隨風而去 %d\n",n++);
12 signal(SIGALRM,doAction);
13 }
14 void setMyTimer(int val)
15 {
16 struct itimerval value;
17 value.it_value.tv_sec=val;
18 value.it_value.tv_usec=0;
19 value.it_interval.tv_sec=val; //val秒
20 value.it_interval.tv_usec=0;
21 signal(SIGALRM, doAction);
22 setitimer(ITIMER_REAL,&value,NULL);
23 while(1);
24 }
25
26 int main( int argc, char **argv )
27 {
28 if (argc<2)
29 {
30 printf("請您輸入參數:\n");//第二個參數是定時器的時長的,單位是秒
31 return -1;
32 }
33 int val=atoi(argv[1]);
34 printf("%d\n",val);
35 setMyTimer(val);
36 return 0;
37 }
代碼就不解釋了,就是啟動的時候獲得第二個參數,用作定時器的時間,然后打印出“讓一切痛苦隨風去 0”,如此循環。
在AIX5.2下,使用XLC++V7.0編譯通過。
運行效果如下