Mercurial Hosting > luan
diff src/luan/modules/Thread.luan @ 1322:d5739c101bd6
improve Thread
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 06 Feb 2019 01:11:12 -0700 |
parents | 70eecde81820 |
children | 8d95711f6615 |
line wrap: on
line diff
--- a/src/luan/modules/Thread.luan Tue Feb 05 22:36:55 2019 -0700 +++ b/src/luan/modules/Thread.luan Wed Feb 06 01:11:12 2019 -0700 @@ -4,6 +4,7 @@ local error = Luan.error local set_metatable = Luan.set_metatable or error() local try = Luan.try or error() +local Time = require "luan:Time.luan" local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "Thread" @@ -34,35 +35,11 @@ end ---[[ -Thread.global = {} -- shared across threads -local map = ThreadLuan.GlobalMap.new() -local global_mt = {} -set_metatable(Thread.global,global_mt) - -function global_mt.__index(_,key) - return map.get(key) -end - -function global_mt.__new_index(_,key,value) - map.put(key,value) -end +local forever = Time.period{years=100} -function Thread.get_global_timeout() - return map.timeout -end - -function Thread.set_global_timeout(timeout) - map.timeout = timeout -end - -function Thread.global_put(key,value) - return map.put(key,value) -end -]] - -function Thread.global_callable(name,timeout,fns) - local callable = ThreadLuan.globalCallable(name,timeout,fns) +function Thread.global_callable(name,fns,timeout) + timeout = timeout or forever + local callable = ThreadLuan.globalCallable(name,fns,timeout) local mt = {} function mt.__index(_,key) return function(...) @@ -76,35 +53,31 @@ Thread.remove_global_callable = ThreadLuan.removeGlobalCallable +function Thread.global_map(name,timeout) + timeout = timeout or forever -local map = {} -local fns = {} + local map = {} + local fns = {} + + function fns.get(key) + return map[key] + end -function fns.get(key) - return map[key] -end + function fns.put(key,value) + map[key] = value + end -function fns.put(key,value) - map[key] = value + local callable = ThreadLuan.globalCallable(name,fns,timeout) + local mt = {} + function mt.__index(_,key) + return callable.call("get",key) + end + function mt.__new_index(_,key,value) + return callable.call("put",key,value) + end + local tbl = {} + set_metatable(tbl,mt) + return tbl end -Thread.global = {} -- shared across threads -local global_mt = {} -set_metatable(Thread.global,global_mt) - -function global_mt.__index(_,key) - return global_mt.fns.get(key) -end - -function global_mt.__new_index(_,key,value) - global_mt.fns.put(key,value) -end - -function Thread.set_global_timeout(timeout) - global_mt.fns = Thread.global_callable("Thread.global",timeout,fns) -end - -Thread.set_global_timeout(60000) -- one minute - - return Thread