我在VBA上制作了一个元胞自动机(Langton's ant FYI)。在每个步骤中,都有一个Sleep(delay)
,其中delay
是一个变量。我还在DoEvents
函数的末尾添加了display
,以确保每个步骤都显示在屏幕上。
使用Timer
我可以监控一步平均需要多长时间。结果绘制在下图中(Y轴:每步的时间(以ms为单位).X轴:delay
(以ms为单位))
你能解释一下为什么会这样吗?特别是为什么它保持稳定?因为IMO,我想(或多或少)有一条直线。 在整个过程中,我在计算机上做了其他任何事情,我得到了这些结果。
提前感谢您的帮助,
答案 0 :(得分:4)
那是因为Sleep API
基于系统时钟。如果您的时钟分辨率低于您正在睡觉的时间,那么它将向上舍入到您系统时钟的最近分辨率。您可以致电timeGetDevCaps
查看系统的最低计时器分辨率。
以这种方式思考。你有一个普通的手表,只包括你通常的小时/分钟/秒针(没有手为1/1000等)。你想要时间半秒钟,但你的手表只能以1秒的间隔移动 - 因此你的手表的分辨率是每秒1滴。由于这个分辨率,你不会知道半秒钟已经过去了直到整秒都过去了,所以它会四舍五入到下一个刻度。