我正在尝试研究信号处理程序的工作原理。我编写了代码,每隔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++;
}
}
有人可以解释我做错了吗?
由于
答案 0 :(得分:2)
你的循环运行时间可能不到100us,试试这个:
volatile int i=0;
while(i<=100000000)
{
//printf("main\n");
i++;
}
我删除了printf,因此输出没有被泛洪,并使我变得易失,因此编译器不会优化循环。