编程精确计时器,每 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 的手册页以了解所有详细信息