【发布时间】:2017-09-25 08:02:00
【问题描述】:
我编写了一个代码来确保 while(1) 循环的每个循环都花费特定的时间(在本例中为 10000µS,等于 0.01 秒)。问题是这段代码在开始时运行良好,但不到一分钟就停止了。就像访问linux时间有限制一样。现在,我正在初始化一个布尔变量,以使这个时间计算运行一次而不是无限。由于性能随时间而变化,因此最好计算每个循环的计算时间。有没有其他方法可以做到这一点?
void some_function(){
struct timeval tstart,tend;
while (1){
gettimeofday (&tstart, NULL);
...
Some computation
...
gettimeofday (&tend, NULL);
diff = (tend.tv_sec - tstart.tv_sec)*1000000L+(tend.tv_usec - tstart.tv_usec);
usleep(10000-diff);
}
}
【问题讨论】:
-
停止时有没有提示信息?
-
检查
diff是否溢出。 -
diff大于 10000 时会发生什么?即使你的计算总是少于 10000us 并不意味着系统会一直运行它。在将控制权交还给您的程序之前,系统可能会选择运行其他进程相当长的一段时间。所以你很容易得到 diff 远大于 10000。使用挂钟进行计时并不总是一个好主意。 (如果你想知道会发生什么,usleep的参数通常是一个无符号数)。 -
添加一些调试
printf调用。 -
@venth1a 你确定它是永远的吗?你测试了吗?我很确定这不会是永远的,而是大约 71 分钟。
标签: c linux gettimeofday