gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:16:53 24 4
gpt4 key购买 nike

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

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 个参数:要查询哪个计时器以及将其存储在哪里。您可以手动查看结构体来查找指定计时器的剩余时间。

关于c - 向处理函数发送时间相关信号并在 c 中正确理解 setitimer、getitimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29530556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com