本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
Lua
语言没有内置的
Sleep
函数, 有
4
种方法可以实现
Sleep
函数功能:
Warning
强烈不推荐使用。
在一个
死循环
中设置一个跳出条件,但是这样的做法会占用大量
CPU
资源。
function Sleep(n)
local t0 = os.clock()
while os.clock() - t0 <= n do end
end点击复制复制失败已复制
提示
推荐在
Linux
系统中使用该方法
这种方法不消耗
CPU
,但是
Windows
系统中没有内置这个命令(或者使用
Cygwin
)。
function Sleep(n)
os.execute("sleep " .. n)
end点击复制复制失败已复制
虽然
Windows
没有内置
Sleep
命令,但是利用
ping
命令的性质。
function Sleep(n)
if n > 0 then os.execute("ping -n " .. tonumber(n + 1) .. " localhost > NUL") end
end点击复制复制失败已复制
使用
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部分资源被占用,其他线程无法进入,会增加时间限制。