You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在指定时间后关闭Lua函数并定时重新启用?

实现周期性运行/暂停的Hi函数

首先要指出你原代码里的一个小问题:os.time()返回的是整数秒,所以你写的wait(.5)实际上不会等待0.5秒,会直接跳过——因为os.time()的数值每秒才会变化一次。如果需要实现小数级的等待,建议用精度更高的os.clock()来重写wait函数。

下面是两种场景的实现方案:

方案一:支持0.5秒间隔打印(高精度等待)

这个方案用os.clock()实现精准的短时间等待,符合你原代码里每0.5秒打印一次的需求:

-- 优化后的等待函数,支持小数秒
function wait(n)
    local start = os.clock()
    while os.clock() - start < n do end
end

-- 运行指定时长的Hi打印
function runHi(duration)
    local endTime = os.clock() + duration
    -- 在指定时长内持续打印Hi
    while os.clock() < endTime do
        print("Hi")
        wait(0.5)
    end
end

-- 无限循环周期:运行6秒 → 暂停2秒 → 重复
while true do
    runHi(6)
    wait(2)
end

方案二:仅支持秒级等待(兼容无os.clock的环境)

如果你的Lua环境不支持os.clock()(比如某些嵌入式场景),可以基于os.time()实现,不过只能做到每秒打印一次:

function wait(n)
    local start = os.time()
    repeat until os.time() > start + n
end

function runHi(duration)
    local start = os.time()
    while os.time() - start < duration do
        print("Hi")
        wait(1) -- 每秒打印一次
    end
end

while true do
    runHi(6)
    wait(2)
end

逻辑说明

  • runHi函数负责控制单次运行的时长,到点就停止打印。
  • 外层的while true循环负责实现“运行6秒→暂停2秒”的周期性逻辑,如果只需要单次执行这个周期,去掉外层循环即可。

内容的提问来源于stack exchange,提问作者j8den

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:10:52