1

私はシグナルハンドラーがどのように機能するかを研究しようとしています。100usごとに1回アラーム信号を発生させるコードを作成しました。ただし、信号は発生しません。コードは次のとおりです。

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

誰かが私が間違っていることを説明できますか?

ありがとう

4

1 に答える 1

2

ループの実行に 100us もかからない可能性があります。これを試してください。

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

出力がフラッディングしないように printf を削除し、コンパイラがループを最適化しないように i を揮発性にしました。

于 2011-09-18T05:13:30.567 に答える