编程精确计时器,每 x 秒调用一次 c 语言函数
programming EXACT timer which calles a function in c language every x seconds
我的部分程序需要一些帮助。我想每隔 x 秒 EXACTLY 调用一个函数。
大多数灵魂的问题是,调用 sleep() 或 w/e 函数的时间会随着时间的推移而增加。
一个例子:如果我想每秒用sleep(1)调用一个函数,它需要1秒+一个非常小的x(调用sleep()的时间功能)。
所以需要 1,x 秒。不是 1.0 秒。
在很长一段时间内,x 会叠加到 "huge amount" 的时间。
我想要一个代码片段,它每秒执行一次,这样我就可以得到准确的时间戳,而不会造成任何额外的延迟。
我认为这是实时编程问题的一部分。
是否有一些可用的代码?
请帮我解决这个问题。 :)
FloKL
您可以重新编码您的睡眠呼叫以有效地通过 1 - a
而不是 1
,其中 a
是一个调整计算以消除累积的 x
。 (显然,您需要调整睡眠单位,因为 a
通常会小于 1
)。
否则 C 不直接为 "exact" 计时提供便利。为此,您需要使用外部硬件。并期望为原子钟级别的精度付出很多钱。
int X = 10;
int t1 = (int)time(NULL);
while(1==1){
// execute your process
...
// calculate next tick
t1 = t1 + X;
sleep(t1 - (int)time(NULL));
}
建议使用函数:setitimer()
,通过头文件公开:<sys/timer.h>
.
建议阅读 setitimer
的手册页以了解所有详细信息
我的部分程序需要一些帮助。我想每隔 x 秒 EXACTLY 调用一个函数。 大多数灵魂的问题是,调用 sleep() 或 w/e 函数的时间会随着时间的推移而增加。
一个例子:如果我想每秒用sleep(1)调用一个函数,它需要1秒+一个非常小的x(调用sleep()的时间功能)。 所以需要 1,x 秒。不是 1.0 秒。
在很长一段时间内,x 会叠加到 "huge amount" 的时间。
我想要一个代码片段,它每秒执行一次,这样我就可以得到准确的时间戳,而不会造成任何额外的延迟。 我认为这是实时编程问题的一部分。
是否有一些可用的代码?
请帮我解决这个问题。 :)
FloKL
您可以重新编码您的睡眠呼叫以有效地通过 1 - a
而不是 1
,其中 a
是一个调整计算以消除累积的 x
。 (显然,您需要调整睡眠单位,因为 a
通常会小于 1
)。
否则 C 不直接为 "exact" 计时提供便利。为此,您需要使用外部硬件。并期望为原子钟级别的精度付出很多钱。
int X = 10;
int t1 = (int)time(NULL);
while(1==1){
// execute your process
...
// calculate next tick
t1 = t1 + X;
sleep(t1 - (int)time(NULL));
}
建议使用函数:setitimer()
,通过头文件公开:<sys/timer.h>
.
建议阅读 setitimer
的手册页以了解所有详细信息