lua_async.timeouts = {
pool = {},
+ executing = {},
last_id = 0,
}
function clearTimeout(id)
lua_async.timeouts.pool[id] = nil
+ lua_async.timeouts.executing[id] = nil
end
function lua_async.timeouts.step(dtime)
- for id, timeout in pairs(lua_async.timeouts.pool) do
+ lua_async.timeouts.executing = lua_async.timeouts.pool
+ lua_async.timeouts.pool = {}
+
+ for id, timeout in pairs(lua_async.timeouts.executing) do
timeout.time_left = timeout.time_left - dtime
if timeout.time_left <= 0 then
timeout.callback(unpack(timeout.args))
- clearTimeout(id)
+ else
+ lua_async.timeouts.pool[id] = timeout
end
+
+ lua_async.timeouts.executing[id] = nil
end
end