]> git.lizzy.rs Git - lua_async.git/blobdiff - util.lua
Sleep for unused tick time & optional realtime
[lua_async.git] / util.lua
index 7061c0619f379e189766f782ec57a1c9f63ab1eb..dbef0b5275c6bace9051442fb88cb067ad90c1f3 100644 (file)
--- a/util.lua
+++ b/util.lua
@@ -27,13 +27,30 @@ function lua_async.resume(co)
 end
 
 function lua_async.run()
-       local last_time = os.clock()
+       assert(lua_async.socket)
+       local last_time = lua_async.clock()
 
        while true do
-               local current_time = os.clock()
+               local current_time = lua_async.clock()
                local dtime = current_time - last_time
                last_time = current_time
 
                lua_async.step(dtime)
+
+               local next = math.huge
+
+               for _, timeout in pairs(lua_async.timeouts.pool)
+                       next = math.min(next, timeout.time_left)
+               end
+
+               for _, interval in pairs(lua_async.intervals.pool)
+                       next = math.min(next, interval.time_left)
+               end
+
+               if next == math.huge then
+                       return
+               end
+
+               lua_async.socket.sleep(next)
        end
 end