Annotate

util/timer.lua @ 11197:50f182931bdd

tools.modtrace: Pass config to serialize()
author Matthew Wild <mwild1@gmail.com>
date Fri, 30 Oct 2020 14:04:40 +0000
parent 10981:e6c1e92cc7a7
child 11264:2cdcf55c6dd5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1523
841d61be198f Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents: 896
diff changeset
1 -- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 4871
diff changeset
4 --
832
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7 --
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
9 local indexedbheap = require "util.indexedbheap";
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
10 local log = require "util.logger".init("timer");
4808
07d0a3a75c8a net.server, net.timer, net.server_select: Rearrange dependencies between these three modules. server.addtimer() is no longer a public function (renamed to _addtimer) and is not available at all from server_event (compat code removed to prevent traceback) (thanks Nulani)
Matthew Wild <mwild1@gmail.com>
parents: 4751
diff changeset
11 local server = require "net.server";
7988
dc758422d896 util.statistics,statsd,throttle,timer: Replace dependency on LuaSockect with util.time for precision time
Kim Alvefur <zash@zash.se>
parents: 6777
diff changeset
12 local get_time = require "util.time".now
832
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13 local type = type;
5880
11f14d44438e util.timer: Import all require upvalues.
Waqas Hussain <waqas20@gmail.com>
parents: 5879
diff changeset
14 local debug_traceback = debug.traceback;
11f14d44438e util.timer: Import all require upvalues.
Waqas Hussain <waqas20@gmail.com>
parents: 5879
diff changeset
15 local tostring = tostring;
9562
acf74ad0b795 Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall
Matthew Wild <mwild1@gmail.com>
parents: 8995
diff changeset
16 local xpcall = require "util.xpcall".xpcall;
8762
2f8523bf7ff2 util.timer: Ensure we don't try to schedule negative timeouts (which rightly upset libevent). Fixes #1135
Matthew Wild <mwild1@gmail.com>
parents: 8685
diff changeset
17 local math_max = math.max;
832
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18
10981
e6c1e92cc7a7 util.timer: Defer to selected net.server if it implements this API
Kim Alvefur <zash@zash.se>
parents: 9562
diff changeset
19 if server.timer then
e6c1e92cc7a7 util.timer: Defer to selected net.server if it implements this API
Kim Alvefur <zash@zash.se>
parents: 9562
diff changeset
20 -- The selected net.server implements this API, so defer to that
e6c1e92cc7a7 util.timer: Defer to selected net.server if it implements this API
Kim Alvefur <zash@zash.se>
parents: 9562
diff changeset
21 return server.timer;
e6c1e92cc7a7 util.timer: Defer to selected net.server if it implements this API
Kim Alvefur <zash@zash.se>
parents: 9562
diff changeset
22 end
e6c1e92cc7a7 util.timer: Defer to selected net.server if it implements this API
Kim Alvefur <zash@zash.se>
parents: 9562
diff changeset
23
6777
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
24 local _ENV = nil;
8555
4f0f5b49bb03 vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7989
diff changeset
25 -- luacheck: std none
832
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
26
6481
dbc72cd1332e Move timer code out of util.timer and into relevant net.server backends
daurnimator <quae@daurnimator.com>
parents: 5898
diff changeset
27 local _add_task = server.add_task;
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
28
6932
f5fd2c5cdf28 util.timer: If possible, close the existing timer handle in order to have only one
Kim Alvefur <zash@zash.se>
parents: 6931
diff changeset
29 local _server_timer;
6930
58e260832334 util.timer: Keep count of how many timer instances are active
Kim Alvefur <zash@zash.se>
parents: 6836
diff changeset
30 local _active_timers = 0;
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
31 local h = indexedbheap.create();
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
32 local params = {};
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
33 local next_time = nil;
5880
11f14d44438e util.timer: Import all require upvalues.
Waqas Hussain <waqas20@gmail.com>
parents: 5879
diff changeset
34 local function _traceback_handler(err) log("error", "Traceback[timer]: %s", debug_traceback(tostring(err), 2)); end
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
35 local function _on_timer(now)
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
36 local peek;
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
37 while true do
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
38 peek = h:peek();
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
39 if peek == nil or peek > now then break; end
9562
acf74ad0b795 Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall
Matthew Wild <mwild1@gmail.com>
parents: 8995
diff changeset
40 local _, callback, id = h:pop();
acf74ad0b795 Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall
Matthew Wild <mwild1@gmail.com>
parents: 8995
diff changeset
41 local param = params[id];
acf74ad0b795 Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall
Matthew Wild <mwild1@gmail.com>
parents: 8995
diff changeset
42 params[id] = nil;
acf74ad0b795 Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall
Matthew Wild <mwild1@gmail.com>
parents: 8995
diff changeset
43 --item(now, id, _param);
acf74ad0b795 Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall
Matthew Wild <mwild1@gmail.com>
parents: 8995
diff changeset
44 local success, err = xpcall(callback, _traceback_handler, now, id, param);
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
45 if success and type(err) == "number" then
9562
acf74ad0b795 Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall
Matthew Wild <mwild1@gmail.com>
parents: 8995
diff changeset
46 h:insert(callback, err + now, id); -- re-add
acf74ad0b795 Many things: switch from hacky multi-arg xpcall implementations to a standard util.xpcall
Matthew Wild <mwild1@gmail.com>
parents: 8995
diff changeset
47 params[id] = param;
2095
3256c5d00901 util.timer: Use libevent for lightweight timers if available and configured (use_libevent option)
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
48 end
3256c5d00901 util.timer: Use libevent for lightweight timers if available and configured (use_libevent option)
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
49 end
3256c5d00901 util.timer: Use libevent for lightweight timers if available and configured (use_libevent option)
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
50
6931
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
51 if peek ~= nil and _active_timers > 1 and peek == next_time then
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
52 -- Another instance of _on_timer already set next_time to the same value,
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
53 -- so it should be safe to not renew this timer event
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
54 peek = nil;
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
55 else
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
56 next_time = peek;
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
57 end
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
58
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
59 if peek then
5c2c8aeb4690 util.timer: Expire timer instance if another instance is already set to take care of the next scheduled event
Kim Alvefur <zash@zash.se>
parents: 6930
diff changeset
60 -- peek is the time of the next event
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
61 return peek - now;
2095
3256c5d00901 util.timer: Use libevent for lightweight timers if available and configured (use_libevent option)
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
62 end
6930
58e260832334 util.timer: Keep count of how many timer instances are active
Kim Alvefur <zash@zash.se>
parents: 6836
diff changeset
63 _active_timers = _active_timers - 1;
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
64 end
6791
e813e8cf6046 Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 6481 6777
diff changeset
65 local function add_task(delay, callback, param)
6836
9f45f0fe5aef util.timer: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6791
diff changeset
66 local current_time = get_time();
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
67 local event_time = current_time + delay;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 4871
diff changeset
68
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
69 local id = h:insert(callback, event_time);
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
70 params[id] = param;
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
71 if next_time == nil or event_time < next_time then
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
72 next_time = event_time;
6932
f5fd2c5cdf28 util.timer: If possible, close the existing timer handle in order to have only one
Kim Alvefur <zash@zash.se>
parents: 6931
diff changeset
73 if _server_timer then
f5fd2c5cdf28 util.timer: If possible, close the existing timer handle in order to have only one
Kim Alvefur <zash@zash.se>
parents: 6931
diff changeset
74 _server_timer:close();
f5fd2c5cdf28 util.timer: If possible, close the existing timer handle in order to have only one
Kim Alvefur <zash@zash.se>
parents: 6931
diff changeset
75 _server_timer = nil;
f5fd2c5cdf28 util.timer: If possible, close the existing timer handle in order to have only one
Kim Alvefur <zash@zash.se>
parents: 6931
diff changeset
76 else
f5fd2c5cdf28 util.timer: If possible, close the existing timer handle in order to have only one
Kim Alvefur <zash@zash.se>
parents: 6931
diff changeset
77 _active_timers = _active_timers + 1;
2095
3256c5d00901 util.timer: Use libevent for lightweight timers if available and configured (use_libevent option)
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
78 end
6932
f5fd2c5cdf28 util.timer: If possible, close the existing timer handle in order to have only one
Kim Alvefur <zash@zash.se>
parents: 6931
diff changeset
79 _server_timer = _add_task(next_time - current_time, _on_timer);
6836
9f45f0fe5aef util.timer: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6791
diff changeset
80 end
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
81 return id;
6836
9f45f0fe5aef util.timer: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6791
diff changeset
82 end
6791
e813e8cf6046 Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 6481 6777
diff changeset
83 local function stop(id)
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
84 params[id] = nil;
7015
17e275e8bd79 util.timer: Reschedule timers from stop() if the next pending event is stopped
Kim Alvefur <zash@zash.se>
parents: 6932
diff changeset
85 local result, item, result_sync = h:remove(id);
17e275e8bd79 util.timer: Reschedule timers from stop() if the next pending event is stopped
Kim Alvefur <zash@zash.se>
parents: 6932
diff changeset
86 local peek = h:peek();
17e275e8bd79 util.timer: Reschedule timers from stop() if the next pending event is stopped
Kim Alvefur <zash@zash.se>
parents: 6932
diff changeset
87 if peek ~= next_time and _server_timer then
17e275e8bd79 util.timer: Reschedule timers from stop() if the next pending event is stopped
Kim Alvefur <zash@zash.se>
parents: 6932
diff changeset
88 next_time = peek;
17e275e8bd79 util.timer: Reschedule timers from stop() if the next pending event is stopped
Kim Alvefur <zash@zash.se>
parents: 6932
diff changeset
89 _server_timer:close();
17e275e8bd79 util.timer: Reschedule timers from stop() if the next pending event is stopped
Kim Alvefur <zash@zash.se>
parents: 6932
diff changeset
90 if next_time ~= nil then
8762
2f8523bf7ff2 util.timer: Ensure we don't try to schedule negative timeouts (which rightly upset libevent). Fixes #1135
Matthew Wild <mwild1@gmail.com>
parents: 8685
diff changeset
91 _server_timer = _add_task(math_max(next_time - get_time(), 0), _on_timer);
2095
3256c5d00901 util.timer: Use libevent for lightweight timers if available and configured (use_libevent option)
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
92 end
3256c5d00901 util.timer: Use libevent for lightweight timers if available and configured (use_libevent option)
Matthew Wild <mwild1@gmail.com>
parents: 1871
diff changeset
93 end
7015
17e275e8bd79 util.timer: Reschedule timers from stop() if the next pending event is stopped
Kim Alvefur <zash@zash.se>
parents: 6932
diff changeset
94 return result, item, result_sync;
6836
9f45f0fe5aef util.timer: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6791
diff changeset
95 end
6791
e813e8cf6046 Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 6481 6777
diff changeset
96 local function reschedule(id, delay)
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
97 local current_time = get_time();
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
98 local event_time = current_time + delay;
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
99 h:reprioritize(id, delay);
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
100 if next_time == nil or event_time < next_time then
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
101 next_time = event_time;
5878
2b1c0c0a2ea6 util.timer: Fix variable name typo.
Waqas Hussain <waqas20@gmail.com>
parents: 5877
diff changeset
102 _add_task(next_time - current_time, _on_timer);
6836
9f45f0fe5aef util.timer: Fix indentation
Kim Alvefur <zash@zash.se>
parents: 6791
diff changeset
103 end
5877
615a0774e4cc util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
Waqas Hussain <waqas20@gmail.com>
parents: 5776
diff changeset
104 return id;
832
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
105 end
282ae70db19f Added util/timer.lua - a timer API
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
106
6777
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
107 return {
6791
e813e8cf6046 Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 6481 6777
diff changeset
108 add_task = add_task;
e813e8cf6046 Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 6481 6777
diff changeset
109 stop = stop;
e813e8cf6046 Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 6481 6777
diff changeset
110 reschedule = reschedule;
6777
5de6b93d0190 util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents: 5776
diff changeset
111 };
6791
e813e8cf6046 Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 6481 6777
diff changeset
112