我有一块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负载直接降低2%
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
printf("Hello World\r\n");
while(1)
{
usleep(50);
}
return 0;
}
答案 0 :(得分:2)
这是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();