Mercurial Hosting > luan
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 |