【发布时间】:2015-12-29 11:00:19
【问题描述】:
我有一个函数,它会在特定的时间间隔被调用。我需要检查以前调用的时间和当前时间。如果函数调用之间的差异是 10 毫秒,则执行一些代码。不应使用睡眠,因为其他一些事情正在并行执行。我编写了以下代码,该函数每 10 毫秒调用一次,但我计算的差异有时会少 1 或 2 毫秒。计算差异的最佳方法是什么?
fxn()
{
int logCurTime;
static int logPrevTime = 0, logDiffTime = 0;
getCurrentTimeInMilliSec(&logCurTime);
if (logPrevTime > 0)
logDiffTime += logCurTime - logPrevTime;
if (logCurTime <= logPrevTime)
return;
if (logDiffTime >= 10)
{
...
...
logDiffTime = 0;
}
logPrevTime = logCurTime;
}
例如: fxn 以 10 毫秒的间隔被调用 10 次。一些实例 logDiffTime 只是 8 或 9,而下一个实例则考虑剩余时间。即 11 或 12。
【问题讨论】:
-
你不能使用 alarm() 并设置期望周期的计时器吗?使用你的函数作为警报处理程序。
-
"事物是并行执行的" - 如果是这样,为什么不使用睡眠?
-
@StefanFalk - 在该函数内部,我将有另一个条件以每 20 秒执行一次 f 代码。所以如果我使用睡眠,那么其他条件会影响
-
建议的答案都没有解决 Windows。
-
1 到 2 毫秒的差异完全在正常操作系统上的抖动范围内。当操作系统决定暂时做其他事情时,预计有时会达到几百毫秒。在您迁移到实时操作系统之前,您无法预测到 10 毫秒。