将时间相关信号发送到处理函数并在 c 中正确理解 setitimer、getitimer

sending time dependent signal to a handler function and understanding setitimer, getitimer correctly in c

我已经成功地制作了一个虚拟计时器,它会在时间周期完成时向处理函数发送信号:

1) 使用 setitimer 创建定时器(周期等长)。 2) 使用 sigaction 并实现了函数处理程序 s.t sigaction 将 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) 假设我在一个时间周期的中间(剩余时间>0):我怎样才能在时间周期结束之前向处理函数发送一个信号并立即开始下一个周期(忽略剩余时间)

不胜感激, 谢谢。

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

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