我成功地制作了一个虚拟计时器,每当完成一个时间周期时,该定时器就会向处理程序函数发送信号:
1)使用setitimer创建计时器(周期相同)。2)使用sigaction并实现函数处理程序s.tσ将SIGVTALRM发送给处理程序函数。我这样做的方式如下:
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):如何在时间周期结束之前立即向处理程序函数发送信号并启动下一个周期(忽略剩下的时间)
非常感谢您的帮助,谢谢。
发布于 2015-04-09 07:07:39
使用C99函数raise()发出另一个信号。如果已为指定的信号注册了信号处理程序,则控制将传递给该函数。
要知道计时器中还有多少时间,请使用getitimer()。它需要两个参数:查询哪个计时器,在哪里存储它。您可以手动查看结构,以找到指定计时器的剩余时间。
https://stackoverflow.com/questions/29530556
复制相似问题