c - 简单的<Time.h>程序占用大量CPU

标签 c visual-studio time time.h

我试图通过在 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 sleepwhile 的末尾

while (clock <= start + 58) { ... Sleep(2000); }

最佳答案

问题不在于您检查当前时间的方式。问题是没有任何东西可以限制循环运行的频率。您的程序继续尽可能快地执行语句,并消耗大量处理器时间。 (在没有其他程序的情况下,在单线程 CPU 上,它将使用 100% 的处理器时间。)

您需要在循环内添加一个“sleep”方法,这将向处理器表明它可以在短时间内停止处理您的程序。有很多方法可以做到这一点; this question有一些例子。

关于c - 简单的<Time.h>程序占用大量CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35259977/

相关文章:

c - C中的反转位模式

c++ - : `CURLcode' does not name a type 的 libcurl API 升级问题

c# - 为什么 Visual Studio 在选择设备时尝试部署到模拟器

javascript - 单击浏览器或键盘中的后退按钮后继续 JavaScript 中的时间

c++ - C 和 C++ 接口(interface)

c - make 编译失败,未定义对 `EVP_DigestUpdate 的引用

C++:我正在解决一个问题,突然我注意到编译的代码没有返回语句

c - 了解堆栈上变量的空间分配

php - 使用PHP将youtube api返回的时间格式转换为秒

android - 如何在 Android 的 UI 屏幕上显示耗时