我如何在 C 中创建一个计时器?我想每 5 秒执行一次某个动作,然后每 2 秒执行另一个动作?
我该如何实现这一目标?谁能指出一些好的链接或代码?
我如何在 C 中创建一个计时器?我想每 5 秒执行一次某个动作,然后每 2 秒执行另一个动作?
我该如何实现这一目标?谁能指出一些好的链接或代码?
问题不在于设置一个周期性定时器,而是有两个不同周期的定时器。
不幸的是 2 不能除以 5,但是我们可以有一个 1s 分辨率的计时器和一个计数器,当计数器是 2 的倍数,或者 5 的倍数时,你可以做你想做的事。您像往常一样使用计时器注册信号处理程序,但此处理程序应如下所示:
static int cnt = 0;
int handler(int) {
cnt++;
if (cnt % 2 == 0) {
action_a();
}
if (cnt % 5 == 0) {
action_b();
}
}
为了摆脱溢出问题,我们可以在达到 2 和 5 的倍数时将计数器重置为 0,例如通过执行以下操作:
int handler(int) {
cnt++;
if (cnt == 10)
{
cnt = 0;
}
if (cnt % 2 == 0) {
action_a();
}
if (cnt % (2*5) == 0) {
action_b();
}
}
请注意,这种技术可以很好地推广到 2 个以上的周期,但是如果您运气不好,最小的公分母可能是一个非常小的周期,因此您可能会在很少使用的情况下获得很高的定时器信号率。例如,如果您有一个 999 毫秒的周期和一个 1000 毫秒的周期,那么您最终每毫秒都有一个信号,这在准确性和开销方面并不是很理想,但是对于 2 秒和 5 秒,这应该是可以接受的每秒一个信号。