如何在我的Lua脚本中添加“睡眠”或“等待”?

时间:2013-08-01 07:23:58

标签: timer lua sleep wait

我正在尝试通过改变一天中的时间为游戏创建一个简单的脚本,但我想以快速动作完成它。所以这就是我所说的:

function disco ( hour, minute)
setTime ( 1, 0 )
SLEEP
setTime ( 2, 0 )
SLEEP
setTime ( 3, 0 )
end

等等。我该怎么做呢?

7 个答案:

答案 0 :(得分:14)

Lua没有提供标准sleep功能,但有多种方法可以实现,有关详细信息,请参阅Sleep Function

对于Linux,这可能是最简单的一个:

function sleep(n)
  os.execute("sleep " .. tonumber(n))
end

在Windows中,您可以使用ping

function sleep(n)
  if n > 0 then os.execute("ping -n " .. tonumber(n+1) .. " localhost > NUL") end
end

使用select的人应该得到一些关注,因为它是获得亚秒级分辨率的唯一可移植方式:

require "socket"

function sleep(sec)
    socket.select(nil, nil, sec)
end

sleep(0.2)

答案 1 :(得分:3)

如果您安装了luasocket:

local socket = require 'socket'
socket.sleep(0.2)

答案 2 :(得分:2)

wxLua有三个睡眠功能:

local wx = require 'wx'
wx.wxSleep(12)   -- sleeps for 12 seconds
wx.wxMilliSleep(1200)   -- sleeps for 1200 milliseconds
wx.wxMicroSleep(1200)   -- sleeps for 1200 microseconds (if the system supports such resolution)

答案 3 :(得分:1)

这个自制软件功能的精度可以降至十分之一秒或更短。

function sleep (a) 
    local sec = tonumber(os.clock() + a); 
    while (os.clock() < sec) do 
    end 
end

答案 4 :(得分:0)

如果您使用的是基于 MacBook 或 UNIX 的系统,请使用:

VIRTUAL_ENV='path/to/._venv'

答案 5 :(得分:0)

我需要一些简单的投票脚本,所以我尝试了 Yu Hao's answer 中的 os.execute 选项。但至少在我的机器上,我不能再用 Ctrl+C 终止脚本。所以我使用 io.popen 尝试了一个非常相似的函数,这个函数确实允许提前终止。

function wait (s)
    local timer = io.popen("sleep " .. s)
    timer:close()
end

答案 6 :(得分:-1)

function wait(time)
    local duration = os.time() + time
    while os.time() < duration do end
end

这可能是向脚本添加等待/睡眠功能的最简单方法之一