2017-07-16 205 views
0

一般来说,使用while循环作为定时/等待机制是一种很好的做法。如果您需要高精确度,并且仅需要几毫秒就会被阻止。可以使用while循环作为计时机制吗?

我目前正在编写Java/Scala游戏循环,但这个问题并没有针对特定的情况。我理解它总是取决于情况是否是一个好主意,但我问是否合理地在合理的情况下是一个好主意。

编辑:

如果你认为这是一个坏主意,请提供,将保持精度高量的一种替代。简单地使用系统定时器可以给出巨大的变化(至少在Java中它是这样),这是一个交易断路器。

+0

我会说不......通过计算的延迟被使用,因为没有别的,现在它是非常糟糕的,因为你需要为每个CPU速度创建一个版本。如果其他程序正在使用循环,它将不流利。 – maraca

+0

几毫秒是处理器的大量时间。如果你想要这么大的延迟,你应该睡觉。纺纱是可以的,并且通常可以选择较小的时间间隔,而您可能不想放弃CPU。 – PSkocik

回答

1

执行时间不是恒定的,取决于许多因素,如CPU速度,OS(CPU的分时产生不同的结果)等。此外,一台机器可以每秒钟执行10e9个周期,毫秒之间的时间是巨大的。对于定时器是非常糟糕的主意,请尝试使用您的语言或Os的计时器。

3

创建一个循环来延迟执行是延迟线程的最糟糕的方式之一,因为它会占用CPU。而不是这样做,你可以使用:

Thread.sleep(milliseconds); 

它根本不消耗CPU。但是,您应该记住,使用线程的函数并不是绝对准确的,因此睡眠函数参数中给出的时间可能比您输入的时间多一点,但是它很少,可以轻松忽略。