为什么这段代码不会多次打印“新时间”? 是否可以修复,而不在循环外调用clock()?
#include <stdio.h>
#include <time.h>
int main(char argv[], int argc)
{
double lastTime = 0;
while(1)
{
printf("New time:\n");
while(lastTime == (lastTime = (double)clock() / (double)CLOCKS_PER_SEC))
{
printf("%f\n", lastTime);
}
}
return 0;
}
答案 0 :(得分:4)
您的代码似乎已被切断。但你的问题是这个逻辑:
while (lastTime == (lastTime = something))
测试永远是真实的;你为lastTime指定了一些值,然后将它与自身进行比较。
答案 1 :(得分:0)
此行无法正常工作(我已添加了右括号,因为上面缺少这些内容):
while(lastTime == (lastTime = (double)clock() / (double)CLOCKS_PER_S))
由于括号,首先评估比较的右侧(赋值),基本上导致这样:
while(lastTime == lastTime)
这基本上导致while(0 == 0)
,显然是while(true)
。
您至少需要第二个变量来保存之前的值。然后只需为lastTime == 0
添加一个额外的案例(即第一次运行循环)。
另外,正如上面评论中所提到的,你不应该比较这个值,因为两个双值并不容易完全相同(特别是在计算时)。
如果你想每隔x毫秒(或任何其他时间)做一些动作,你应该使用一个计数器来累计时间:
for(clock_t timeSkipped = 0, lastTick = clock() ; ; timeSkipped += clock() - lastTick, lastTick = clock()) {
while(timeSkipped > 0.5 * CLOCKS_PER_S) { // example: this will run the content of this loop at a fixed time step of once every half second
timeSkipped -= 0.5 * CLOCKS_PER_S;
printf("Tick!");
}
}