我试图通过在 VS 中编写一些简单的东西来熟悉 C time.h 库。下面的代码只是每两秒打印 x 加上自身的值:
int main() {
time_t start = time(NULL);
time_t clock = time(NULL);
time_t clockTemp = time(NULL); //temporary clock
int x = 1;
//program will continue for a minute (60 sec)
while (clock <= start + 58) {
clockTemp = time(NULL);
if (clockTemp >= clock + 2) { //if 2 seconds has passed
clock = clockTemp;
x = ADD(x);
printf("%d at %d\n", x, timeDiff(start, clock));
}
}
}
int timeDiff(int start, int at) {
return at - start;
}
我关心的是该程序占用的 CPU 量,大约为 22%。我认为这个问题源于clockTemp的不断更新(就在while
语句下方),但我不确定如何解决这个问题。这有可能是 Visual Studio 的问题,还是有特殊的方法来检查时间?
解决方案
代码需要 sleep 功能,这样它就不需要不断运行。
我添加了 sleep #include <windows.h>
并输入 Sleep (2000) //2 second sleep
在 while
的末尾
while (clock <= start + 58) {
...
Sleep(2000); }
最佳答案
问题不在于您检查当前时间的方式。问题是没有任何东西可以限制循环运行的频率。您的程序继续尽可能快地执行语句,并消耗大量处理器时间。 (在没有其他程序的情况下,在单线程 CPU 上,它将使用 100% 的处理器时间。)
您需要在循环内添加一个“sleep”方法,这将向处理器表明它可以在短时间内停止处理您的程序。有很多方法可以做到这一点; this question有一些例子。
关于c - 简单的<Time.h>程序占用大量CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35259977/