comparison 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
comparison
equal deleted inserted replaced
1321:307e76ccd0d6 1322:d5739c101bd6
2 local ThreadLuan = require "java:luan.modules.ThreadLuan" 2 local ThreadLuan = require "java:luan.modules.ThreadLuan"
3 local Luan = require "luan:Luan.luan" 3 local Luan = require "luan:Luan.luan"
4 local error = Luan.error 4 local error = Luan.error
5 local set_metatable = Luan.set_metatable or error() 5 local set_metatable = Luan.set_metatable or error()
6 local try = Luan.try or error() 6 local try = Luan.try or error()
7 local Time = require "luan:Time.luan"
7 local Logging = require "luan:logging/Logging.luan" 8 local Logging = require "luan:logging/Logging.luan"
8 local logger = Logging.logger "Thread" 9 local logger = Logging.logger "Thread"
9 10
10 11
11 local Thread = {} 12 local Thread = {}
32 fn = safe(fn) 33 fn = safe(fn)
33 ThreadLuan.schedule(delay,fn,repeating) 34 ThreadLuan.schedule(delay,fn,repeating)
34 end 35 end
35 36
36 37
37 --[[ 38 local forever = Time.period{years=100}
38 Thread.global = {} -- shared across threads
39 local map = ThreadLuan.GlobalMap.new()
40 local global_mt = {}
41 set_metatable(Thread.global,global_mt)
42 39
43 function global_mt.__index(_,key) 40 function Thread.global_callable(name,fns,timeout)
44 return map.get(key) 41 timeout = timeout or forever
45 end 42 local callable = ThreadLuan.globalCallable(name,fns,timeout)
46
47 function global_mt.__new_index(_,key,value)
48 map.put(key,value)
49 end
50
51 function Thread.get_global_timeout()
52 return map.timeout
53 end
54
55 function Thread.set_global_timeout(timeout)
56 map.timeout = timeout
57 end
58
59 function Thread.global_put(key,value)
60 return map.put(key,value)
61 end
62 ]]
63
64 function Thread.global_callable(name,timeout,fns)
65 local callable = ThreadLuan.globalCallable(name,timeout,fns)
66 local mt = {} 43 local mt = {}
67 function mt.__index(_,key) 44 function mt.__index(_,key)
68 return function(...) 45 return function(...)
69 return callable.call(key,...) 46 return callable.call(key,...)
70 end 47 end
74 return tbl 51 return tbl
75 end 52 end
76 53
77 Thread.remove_global_callable = ThreadLuan.removeGlobalCallable 54 Thread.remove_global_callable = ThreadLuan.removeGlobalCallable
78 55
56 function Thread.global_map(name,timeout)
57 timeout = timeout or forever
79 58
80 local map = {} 59 local map = {}
81 local fns = {} 60 local fns = {}
82 61
83 function fns.get(key) 62 function fns.get(key)
84 return map[key] 63 return map[key]
64 end
65
66 function fns.put(key,value)
67 map[key] = value
68 end
69
70 local callable = ThreadLuan.globalCallable(name,fns,timeout)
71 local mt = {}
72 function mt.__index(_,key)
73 return callable.call("get",key)
74 end
75 function mt.__new_index(_,key,value)
76 return callable.call("put",key,value)
77 end
78 local tbl = {}
79 set_metatable(tbl,mt)
80 return tbl
85 end 81 end
86 82
87 function fns.put(key,value)
88 map[key] = value
89 end
90
91 Thread.global = {} -- shared across threads
92 local global_mt = {}
93 set_metatable(Thread.global,global_mt)
94
95 function global_mt.__index(_,key)
96 return global_mt.fns.get(key)
97 end
98
99 function global_mt.__new_index(_,key,value)
100 global_mt.fns.put(key,value)
101 end
102
103 function Thread.set_global_timeout(timeout)
104 global_mt.fns = Thread.global_callable("Thread.global",timeout,fns)
105 end
106
107 Thread.set_global_timeout(60000) -- one minute
108
109
110 return Thread 83 return Thread