2011-09-18 55 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++; 
} 
} 

有人可以解释我做错了什么?

感谢

回答

2

你的循环可能采取小于100us的运行,试试这个:

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

我删除的printf所以输出没有被淹,搞得我挥发性所以编译器荣获”优化循环。

相关问题