【发布时间】:2016-05-17 13:04:51
【问题描述】:
我试图通过在 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 语句的下方),但我不确定如何解决这个问题。这可能是视觉工作室的问题,还是有特殊的方法来检查时间?
解决方案
代码需要 sleep 函数,这样它就不需要经常运行。
我用#include <windows.h> 添加了睡眠并将Sleep (2000) //2 second sleep 放在while 的末尾
while (clock <= start + 58) {
...
Sleep(2000); }
【问题讨论】:
-
看起来你在 4 核机器上旋转等待。 (或 2 + HT)
-
为什么您认为 CPU 密集型循环会使用少于一个内核?我假设你有 4 个?
-
在 2 秒内,我只需 Sleep(2000) 它,如果需要更高的准确性,可能会进行间隔校正。这将消除您的 CPU 消耗。
-
while不是声明,而是声明。 -
您不会在循环中休眠,因此代码会不断且尽可能快地执行。完全符合预期。
标签: c visual-studio time time.h