linux收不到信号,定时器收不到信号

定时器收不到信号

发布时间: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");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值