gpt4 book ai didi

c - 基于 ARM 的板上 While 循环的巨大 CPU 负载

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:33 26 4
gpt4 key购买 nike

我有一个 iMX6 板,我的一个应用程序在没有做太多工作的情况下占用了很多 CPU。我写了一个示例代码,而不是仅仅发布原始应用程序

#include <stdio.h>

int main(int argc, char *argv[])
{
printf("Hello World\r\n");
while(1);
return 0;
}

这占用了 25% 的 CPU 负载..你能告诉我我可以做些什么来减少 CPU 负载吗

更新:

增加 50 微秒的休眠将 CPU Load 直接降低到 2%

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
printf("Hello World\r\n");
while(1)
{
usleep(50);
}
return 0;
}

最佳答案

这是 busy looping 的示例.

while 循环正在消耗您的一个核心的所有可用资源。由于您有四个内核,因此您看到 25% 的 CPU 负载。

您可以按如下方式导致不使用任何 CPU 资源的定时延迟:

#ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h>
#endif

int main()
{
pollingDelay = 100
//do stuff

//sleep:
#ifdef _WIN32
Sleep(pollingDelay);
#else
usleep(pollingDelay*1000); /* sleep for 100 milliSeconds */
#endif

//do stuff again
return 0;
}

如果你想等待用户,下面的工作。如果用户在输入前挑衅地按键,你可能需要做一些更复杂的事情。

printf("Press ENTER key to Continue\n");  
getchar();

关于c - 基于 ARM 的板上 While 循环的巨大 CPU 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47385122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com