作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 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/
我是一名优秀的程序员,十分优秀!