尽管延迟可变,但每步的平均时间是恒定的

Average time per step is constant despite a variable delay

我在 VBA 上制作了一个元胞自动机(Langton 的蚂蚁 FYI)。在每个步骤中,都有一个 Sleep(delay),其中 delay 是一个变量。我还在 display 函数的末尾添加了 DoEvents 以确保每个步骤都显示在屏幕上。 使用 Timer 我可以监控一步平均需要多长时间。结果绘制在下面的图表上(Y 轴:每步时间(以毫秒为单位)。X 轴:delay(以毫秒为单位))

你能解释一下为什么它看起来像那样吗?特别是为什么它保持稳定?因为 IMO,我想(或多或少)有一条直线。 在整个过程中,我没有在计算机上执行任何其他操作就得到了这些结果。

提前感谢您的帮助,

那是因为 Sleep API 是基于系统时钟的。如果您的时钟分辨率低于您的睡眠时间,那么它将四舍五入为最接近您的系统时钟的分辨率。您可以调用 timeGetDevCaps 查看系统的最小计时器分辨率。

这样想。你有一个普通的手表,只包括你常用的 Hour/Minute/Second 指针(1/1000 没有指针,等等)。您想要计时半秒,但您的手表仅以 1 秒为间隔移动 - 因此您手表的分辨率为每秒 1 刻度。由于这个分辨率,你不会知道半秒实际上已经过去了,直到整秒过去,所以它四舍五入到下一个刻度。