定时器收不到信号
发布时间:2013-05-23 15:14:54来源:红联作者:yfcbtx
static void handler(int sig, siginfo_t *si, void *uc) {
signal(sig, Myfunction);
}
我的接收函数Myfunction()有时会收不到任何信号,以后永远都收不到信号,程序就永远挂起了,帮我看看是不是我初始化定时器错了?
初始化
#define CLOCKID CLOCK_REALTIME
#define SIG SIGRTMIN
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = handler;
sigemptyset(&sa.sa_mask);
if (sigaction(SIG, &sa, NULL) == -1)
errExit("sigaction");
/* Block timer signal temporarily */
printf("Blocking signal %d\n", SIG);
sigemptyset(&mask);
sigaddset(&mask, SIG);
if (sigprocmask(SIG_SETMASK, &mask, NULL) == -1)
errExit("sigprocmask");
/* Create the timer */
sev.sigev_notify = SIGEV_SIGNAL;
sev.sigev_signo = SIG;
sev.sigev_value.sival_ptr = &mr->timerid;
if (timer_create(CLOCKID, &sev, &mr->timerid) == -1)
errExit("timer_create");
/* Start the timer */
its.it_value.tv_sec = 0;
its.it_value.tv_nsec = 1000*1000; //unit: ns;
its.it_interval.tv_sec = its.it_value.tv_sec;
its.it_interval.tv_nsec = its.it_value.tv_nsec;
if (timer_settime(mr->timerid, 0, &its, NULL) == -1)
errExit("timer_settime");
/* Unlock the timer signal, so that timer notification can be delivered */
printf("Unblocking signal %d\n", SIG);
if (sigprocmask(SIG_UNBLOCK, &mask, NULL) == -1)
errExit("sigprocmask");