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

Huge CPU Load on ARM based board for While loop

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

#include <stdio.h>

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

这占用了 CPU 负载的 25%.. 你能告诉我我可以做些什么来减少 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;
}

这是 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();