gpt4 book ai didi

objective-c - 使用 mach_absolute_time() 减慢模拟速度。这是正确的方法吗?

转载 作者:行者123 更新时间:2023-12-03 16:24:48 27 4
gpt4 key购买 nike

我正在为 OS X (Obj-C/Cocoa) 编写一个应用程序,它运行模拟并向用户显示结果。在一种情况下,我希望模拟“实时”运行,以便用户可以观看它以与现实生活中相同的速度运行。模拟以特定时间步长 dt 运行。现在,我正在使用 mach_absolute_time() 来减慢模拟速度。当我分析这段代码时,我发现到目前为止,我的大部分 CPU 时间都花在 mach_absolute_time() 上,并且我的 CPU 固定在 100%。我这样做对吗?我想,如果我放慢模拟速度,使得程序在大多数时间都没有模拟任何东西,那么 CPU 使用率应该会下降,但 mach_absolute_time() 显然不是一个“免费调用”,所以我觉得可能会有有更好的方法吗?

double nextT = mach_absolute_time();
while (runningSimulation)
{
if (mach_absolute_time() >= nextT)
{
nextT += dt_ns;
// Compute the next "frame" of the simulation
// ....
}
}

最佳答案

完全不要旋转。

这是编写 GUI 应用程序的首要规则,其中电池生命周期和应用程序响应能力很重要。

sleep()nanosleep() 可以工作,但只有在主线程以外的其他地方使用

更好的解决方案是使用 GCD 中任何基于时间的构造,因为这将更有效地利用系统资源。

如果您希望模拟对用户来说显得流畅,您确实需要将减慢版本锁定到屏幕的刷新率。在 iOS 上,有 CADisplayLink 。我不知道 Mac 上有直接等效的东西。

关于objective-c - 使用 mach_absolute_time() 减慢模拟速度。这是正确的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8170622/

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