2011-09-18 2 views
1

신호 처리기가 작동하는 방식을 연구하려고합니다. 나는 내가 100us에 한 번씩 경보 신호를 발생시키는 코드를 작성했다. 그러나 신호는 발생하지 않습니다.주 처리기에서 신호 처리기가 호출되지 않습니다.

#include <signal.h> 
#include <ucontext.h> 
#include <sys/time.h> 
#include<unistd.h> 
#include<setjmp.h> 
#include<stdio.h> 

void handler(int signum, siginfo_t *ptr, ucontext_t *old_context) 
{ 
    printf("inside handler"); 
} 

int main() 
{ 
struct itimerval itv; 
struct sigaction act; 
act.sa_handler = handler; 
act.sa_flags=SA_RESTART|SA_SIGINFO; 
sigaction(SIGVTALRM, &act, 0); 
itv.it_interval.tv_sec=0; 
itv.it_interval.tv_usec=100; 
itv.it_value.tv_sec = 0; 
itv.it_value.tv_usec = 100;   

setitimer(ITIMER_VIRTUAL, &itv, NULL); //engage timer 
int i=0; 
while(i<=100) 
{ 
    printf("main\n"); 
    i++; 
} 
} 

어떤 사람이 내가 잘못하고있는 무슨 설명 할 수 있습니다 : 여기 코드는?

감사

루프 아마 실행 미만 100?를 취하고있다

답변

2

이 시도 : 나는 출력이 침수되지 않도록의 printf를 제거하고 컴파일러가 '원 그래서 휘발성 만든

volatile int i=0; 
while(i<=100000000) 
{ 
    //printf("main\n"); 
    i++; 
} 

루프를 최적화하십시오.