简单<Time.h>程序占用量大CPU
Simple <Time.h> program takes large amount CPU
我试图通过在 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 的问题,还是有特殊的方法来检查时间?
解决方案
代码需要休眠功能,这样它就不需要一直运行。
我用 #include <windows.h>
添加了 sleep 并把 Sleep (2000) //2 second sleep
放在 while
的末尾
while (clock <= start + 58) {
...
Sleep(2000); }
问题不在于您检查当前时间的方式。问题是没有什么可以限制循环运行的频率。您的程序继续尽可能快地执行语句,并占用大量处理器时间。 (在没有其他程序的情况下,在单线程 CPU 上,它将使用 100% 的处理器时间。)
您需要在循环中添加一个 "sleep" 方法,这将向处理器表明它可以在短时间内停止处理您的程序。有很多方法可以做到这一点; this question 有一些例子。
我试图通过在 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 的问题,还是有特殊的方法来检查时间?
解决方案
代码需要休眠功能,这样它就不需要一直运行。
我用 #include <windows.h>
添加了 sleep 并把 Sleep (2000) //2 second sleep
放在 while
while (clock <= start + 58) {
...
Sleep(2000); }
问题不在于您检查当前时间的方式。问题是没有什么可以限制循环运行的频率。您的程序继续尽可能快地执行语句,并占用大量处理器时间。 (在没有其他程序的情况下,在单线程 CPU 上,它将使用 100% 的处理器时间。)
您需要在循环中添加一个 "sleep" 方法,这将向处理器表明它可以在短时间内停止处理您的程序。有很多方法可以做到这一点; this question 有一些例子。