util/timer.lua
changeset 6933 58e260832334
parent 6839 9f45f0fe5aef
child 6934 5c2c8aeb4690
equal deleted inserted replaced
6932:03bc9e197fcc 6933:58e260832334
    17 
    17 
    18 local _ENV = nil;
    18 local _ENV = nil;
    19 
    19 
    20 local _add_task = server.add_task;
    20 local _add_task = server.add_task;
    21 
    21 
       
    22 local _active_timers = 0;
    22 local h = indexedbheap.create();
    23 local h = indexedbheap.create();
    23 local params = {};
    24 local params = {};
    24 local next_time = nil;
    25 local next_time = nil;
    25 local _id, _callback, _now, _param;
    26 local _id, _callback, _now, _param;
    26 local function _call() return _callback(_now, _id, _param); end
    27 local function _call() return _callback(_now, _id, _param); end
    44 	end
    45 	end
    45 	next_time = peek;
    46 	next_time = peek;
    46 	if peek ~= nil then
    47 	if peek ~= nil then
    47 		return peek - now;
    48 		return peek - now;
    48 	end
    49 	end
       
    50 	_active_timers = _active_timers - 1;
    49 end
    51 end
    50 local function add_task(delay, callback, param)
    52 local function add_task(delay, callback, param)
    51 	local current_time = get_time();
    53 	local current_time = get_time();
    52 	local event_time = current_time + delay;
    54 	local event_time = current_time + delay;
    53 
    55 
    54 	local id = h:insert(callback, event_time);
    56 	local id = h:insert(callback, event_time);
    55 	params[id] = param;
    57 	params[id] = param;
    56 	if next_time == nil or event_time < next_time then
    58 	if next_time == nil or event_time < next_time then
    57 		next_time = event_time;
    59 		next_time = event_time;
       
    60 		_active_timers = _active_timers + 1;
    58 		_add_task(next_time - current_time, _on_timer);
    61 		_add_task(next_time - current_time, _on_timer);
    59 	end
    62 	end
    60 	return id;
    63 	return id;
    61 end
    64 end
    62 local function stop(id)
    65 local function stop(id)