为什么游戏循环需要睡眠,你如何确定多长时间?你如何保持线程的睡眠时间不变?
答案 0 :(得分:1)
操作系统通常会在任何给定的核心上同时运行大量线程/进程,并且调度程序必须决定每个线程/进程将获得多少处理器时间。如果一个线程连续运行(没有休眠),它最终可能会占用可用的处理器资源。
有时这是合适的,例如用于极其计算密集型应用程序。但是,大多数程序不应该这样做。特别是游戏,瓶颈通常是图形或IO性能,而不是可用的CPU资源(即你的程序可能会在等待其他东西赶上时浪费处理器时间)。
让你的线程在每次迭代中短时间内休眠可以释放一些处理器时间。这使得调度程序可以为其他线程/进程分配时间,并使系统保持更好的运行。基本上,睡眠时间是为了系统的其他部分,而不是您自己的程序。
这样的睡眠时间确实没有'正确'。一般来说,您的线程应该尽可能长时间地休眠,而不会影响程序的性能。这样做的一个好方法是确定游戏所需的帧速率,然后计算每帧之间可以承受多少延迟。
每次绕过主循环,检查自上一帧以来是否已经过了一段时间。如果没有,请暂停一小段时间,然后在下一轮循环后再试一次。