简单<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 有一些例子。