#include <stdlib.h> #include <signal.h> static int count = 0; static struct itimerval oldtv; struct itimerval itv; void set_timer() { itv.it_interval.tv_sec = 0; itv.it_interval.tv_usec = 990000; //啟動后的定時器每隔990ms喚醒一次 itv.it_value.tv_sec = 0; itv.it_value.tv_usec = 50000; //定時器在50ms后啟動 setitimer(ITIMER_REAL, &itv, &oldtv); //ITIMER_REAL表示每次定時器喚醒時將會觸發SIGALRM信號 } void shut_timer() { itv.it_value.tv_sec = 0; //將啟動參數設置為0,表示定時器不啟動 itv.it_value.tv_usec = 0; setitimer(ITIMER_REAL, &itv, &oldtv); } void signal_handler(int m) { count ++; printf("%d\n", count); if(count==4) //調用4次后,關閉定時器 shut_timer(); } int main() { signal(SIGALRM, signal_handler); //將SIGALRM信號與signal_handler函數建立關系,當信號觸發時便會調用該函數. set_timer(); while(count < 10000); exit(0); return 1; }