【问题标题】:Signal handler is not getting called in main function信号处理程序没有在主函数中被调用
【发布时间】:2011-09-18 05:05:03
【问题描述】:

我正在尝试研究信号处理程序的工作原理。我编写了代码,每 100 微秒触发一次警报信号。但是,没有发出信号。这是代码:

 #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++;
 }  
}

谁能解释我做错了什么?

谢谢

【问题讨论】:

    标签: c signals signal-handling


    【解决方案1】:

    您的循环运行时间可能不到 100us,试试这个:

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

    我删除了 printf 以便输出不会被淹没,并让 i volatile 因此编译器不会优化循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多