首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向处理程序函数发送随时间变化的信号,并正确理解c中的setitimer、getitimer

向处理程序函数发送随时间变化的信号,并正确理解c中的setitimer、getitimer
EN

Stack Overflow用户
提问于 2015-04-09 05:37:04
回答 1查看 276关注 0票数 0

我成功地制作了一个虚拟计时器,每当完成一个时间周期时,该定时器就会向处理程序函数发送信号:

1)使用setitimer创建计时器(周期相同)。2)使用sigaction并实现函数处理程序s.tσ将SIGVTALRM发送给处理程序函数。我这样做的方式如下:

代码语言:javascript
复制
void handler(int sig){
//some code
}

//in main:
struct sigaction action;
action.sa_handler = &handler;
sigaction (SIGVTALRM, &action, NULL);


struct itimerval timer;
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = Gquantum;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = Gquantum;
setitimer (ITIMER_VIRTUAL, &timer, NULL);

我的问题是,有时我需要在周期完成之前发送一个信号,并重置计时器:1)我如何知道在当前周期中还有多少时间?(可能与getitimer有关)

2)假设im处于时间周期的中间(time left>0):如何在时间周期结束之前立即向处理程序函数发送信号并启动下一个周期(忽略剩下的时间)

非常感谢您的帮助,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-09 07:07:39

使用C99函数raise()发出另一个信号。如果已为指定的信号注册了信号处理程序,则控制将传递给该函数。

要知道计时器中还有多少时间,请使用getitimer()。它需要两个参数:查询哪个计时器,在哪里存储它。您可以手动查看结构,以找到指定计时器的剩余时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29530556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档