本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

Lua 语言没有内置的 Sleep 函数, 有 4 种方法可以实现 Sleep 函数功能:


死循环

Warning

强烈不推荐使用。


在一个 死循环 中设置一个跳出条件,但是这样的做法会占用大量 CPU 资源。

function Sleep(n)
  local t0 = os.clock()
  while os.clock() - t0 <= n do end
end点击复制复制失败已复制


调用系统Sleep函数

提示

推荐在 Linux 系统中使用该方法


这种方法不消耗 CPU ,但是 Windows 系统中没有内置这个命令(或者使用 Cygwin )。

function Sleep(n)
  os.execute("sleep " .. n)
end点击复制复制失败已复制


ping

虽然 Windows 没有内置 Sleep 命令,但是利用 ping 命令的性质。

function Sleep(n)
  if n > 0 then os.execute("ping -n " .. tonumber(n + 1) .. " localhost > NUL") end
end点击复制复制失败已复制


socket.select

使用 socket 库中 select 函数, 可以传递 0.1 n , 使得休眠的时间精度达到 毫秒 级别。

‍require("socket")
function Sleep(n)
  socket.select(nil, nil, n)
                    
第一个区别是在对系统资源的占用上。 wait是Object类的一个函数(也就意味着所有对象都有这个函数),指线程处于进入等待状态,此时线程不占用任何资源,不增加时间限制。wait可以被notify和notifyAll函数唤醒(当然这两个同时也是Object的函数)。 而sleep则是Thread类的一个函数,指线程被调用时,占着CPU不工作。此时,系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制。