如何在指定时间后关闭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
相关产品推荐
相关产品推荐

