profnsched/after.lua

41 lines
892 B
Lua

dofile(minetest.get_modpath("profnsched").."/queue.lua")
local jobs = {}
local scheduler = scheduler
function getnjobs()
return #jobs
end
-- For minetest.after replacement
local function check_expired_jobs()
local time = core.get_us_time()
local tjobs = {}
for i,job in pairs(jobs) do
if time >= job.expire then
scheduler.add(1, job)
--jobs[i] = nil
else
tjobs[#tjobs+1] = job
end
end
jobs = tjobs
scheduler.asap(4, check_expired_jobs)
end
scheduler.asap(4, check_expired_jobs)
-- redefine core.after function
function minetest.after(after, func, ...)
assert(type(func) == "function", "Invalid core.after invocation")
local fname = debug.getinfo(2, "S").linedefined --imprecis
local job = {
func_code = func,
expire = core.get_us_time() + after*1000000,
arg = {...},
mod_name = core.get_last_run_mod(),
func_id = "#"..fname
}
jobs[#jobs+1] = job
end