| [ CnUnix ] in KIDS 글 쓴 이(By): jewel (그냥! 보석�x) 날 짜 (Date): 1995년09월19일(화) 13시32분29초 KDT 제 목(Title): setitimer사용법(예제) 안녕하세요.. timer를 사용해서 프로그램 해야할 때가 종종 생기는데, 아주 쉽게 사용하실 수 있습니다. 일단 간단하게 설명드리면,, timer를 사용하시기전에 signal(SIGALRM, handler); 함수를 불러줍니다. 그러면 setitimer에서 명시한 시간이 지나면 SIGALRM이 뜨고, 이 SIGALRM이 뜨면 등록한 handler로 call이 옵니다. 일종의 timer callback이라고 생각하시면 됩니다. 원하는 시간이 지나면 SIGALAM이 뜨게 하는 함수는 setitimer(ITIMER_REAL, &itimer, (struct itimerval *)0); 입니다. 첫번째 인자는 사용하는 시간의 종류, 두번째 인자는 timer가 expire될 시간. 그리고 세번째는 이전에 설정된 timer가 있을때 남은 시간이 기록됩니다. 세번째는 그냥 NULL로 하시면 됩니다. 그리고 time out이 되어서 handler가 불려지면 또 다시 setitimer를 불러서 다음 timerout 시간을 설정해야 계속 제어를 받을 수 있습니다. 좀 설명이 난해하군요..:) 다음은 예제입니다. 이걸 한번 돌려보시면 이해가 되실듯.. #include <signal.h> #include <sys/time.h> #include <unistd.h> int val=40000; void handler(); main() { signal(SIGALRM, handler); set_timer(); for(;;) ; } void handler() { printf("Timer Expired [%d]\n", val); set_timer(); } set_timer() { struct itimerval itimer; itimer.it_interval.tv_sec = 0; itimer.it_interval.tv_usec = 0; itimer.it_value.tv_sec = 0; itimer.it_value.tv_usec = val; setitimer(ITIMER_REAL, &itimer, (struct itimerval *)0); } OS에 따라서 한번만 불려지고, error가 발생할 수도 있는데 그때는 signal() 부분을 setitimer를 설정할때 같이 하면 됩니다. 그럼 이만.. 보석.. |