简而言之:相比于通过延迟减速的类似循环,未经延迟的while循环是否会消耗大量的处理能力?
详细解释:
我经常遇到这个问题。我正在编写程序的核心部分(无论是微控制器单元还是计算机应用程序),它由一个半无限的while循环组成,以保持活动状态并寻找事件。
我将采用以下示例:我有一个使用SDL窗口和控制台的小型应用程序。在while循环中,我想要监听此SDL窗口的事件,但是我也希望通过全局变量根据命令行输入来打破这个循环。可能的解决方案(伪代码):
// Global
bool running = true;
// ...
while (running)
{
if (getEvent() == quit)
{
running = false;
}
}
shutdown();
核心 while 循环将从被监听事件或一些外部因素退出。 然而,这个循环连续运行,甚至可能每秒运行1000次。这有些过度了,我不需要那么快的响应时间。因此,我经常添加一个延迟语句:
while (running)
{
if (getEvent() == quit)
{
running = false;
}
delay(50); // Wait 50 milliseconds
}
这将刷新率限制为每秒20次,这已经足够了。
那么。两者之间是否有真正的区别?是否显著?在微控制器单元上(处理能力非常有限(但除程序外没有其他需求运行...)),它是否更为重要?
delay()
或sleep()
等东西很少是一个好主意。 - user0042while (true) {}
。毕竟,它根本不需要任何操作。 - Robertostdin
(例如,使用select
)。 - keltar