util.timer: Activate higher timer precision.

Thu, 02 Dec 2010 22:41:26 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Thu, 02 Dec 2010 22:41:26 +0500
changeset 3683
c2158221e2e6
parent 3682
d12141cbbaa0
child 3684
bd071e3901dc

util.timer: Activate higher timer precision.

util/timer.lua file | annotate | diff | comparison | revisions
--- a/util/timer.lua	Thu Dec 02 22:40:42 2010 +0500
+++ b/util/timer.lua	Thu Dec 02 22:41:26 2010 +0500
@@ -11,7 +11,9 @@
 local event = require "net.server".event;
 local event_base = require "net.server".event_base;
 
-local get_time = os.time;
+local math_min = math.min
+local math_huge = math.huge
+local get_time = require "socket".gettime;
 local t_insert = table.insert;
 local t_remove = table.remove;
 local ipairs, pairs = ipairs, pairs;
@@ -43,14 +45,21 @@
 			new_data = {};
 		end
 		
+		local next_time = math_huge;
 		for i, d in pairs(data) do
 			local t, func = d[1], d[2];
 			if t <= current_time then
 				data[i] = nil;
 				local r = func(current_time);
-				if type(r) == "number" then _add_task(r, func); end
+				if type(r) == "number" then
+					_add_task(r, func);
+					next_time = math_min(next_time, r);
+				end
+			else
+				next_time = math_min(next_time, t - current_time);
 			end
 		end
+		return next_time;
 	end);
 else
 	local EVENT_LEAVE = (event.core and event.core.LEAVE) or -1;

mercurial