Lua微秒睡眠

时间:2015-05-26 06:47:09

标签: lua sleep

好的,我需要在我的lua脚本中等待(例如)10 us。有没有办法做到这一点?

现在我使用socket

这个简单的(非忙等待)函数
function my_utils.sleep(sec)
    socket.select(nil, nil, sec)
end

但似乎它的睡眠最少"是毫秒。

示例1:

for x=0,2*math.pi,0.008 do
    misc.printus()
    misc.sleep(0.001)
end

输出:

0.022654
0.023654
0.024654
0.025654
0.026654
0.027654
0.028654
0.029654
0.030654
0.031654
0.032654
...

不错!

示例2:

for x=0,2*math.pi,0.008 do
    misc.printus()
    misc.sleep(0.0001)
end

输出:

0.537089
0.537089
0.537089
0.537089
... --(lots of)
38089
0.538089
0.538089
0.538089
0.538089
0.538089
0.538089
... --(lots of)
0.538089
0.577091 -- (jumps over 0.04 second!)
0.577091
0.577091
0.577091
0.577091
... --(and so on)

有人可以给我一些解释(大约0.04秒跳跃)吗?

2 个答案:

答案 0 :(得分:3)

Lua使用操作系统提供的时间服务。可用的分辨率通常不是很高,并且它被认为是Lua级别的时间跳跃。

想象一下具有微小分辨率的挂钟。它不能用于测量毫秒间隔。

答案 1 :(得分:1)

除了操作系统的抖动之外,lua还使用垃圾收集器来管理其内存,该内存将定期运行。当它运行时,所有其他操作都会延迟(尽管延迟应该很短)。根据程序中的分配量,很可能您的代码在这样的GC暂停时跳闸。