Mercurial Hosting > luan
view src/luan/modules/Thread.luan @ 1255:4f571a974132
replace Thread.schedule with Thread.once and Thread.repeating
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 03 Sep 2018 06:13:55 -0600 |
parents | 2b5046cd7963 |
children | a9cc35c71eb0 |
line wrap: on
line source
java() local ThreadLuan = require "java:luan.modules.ThreadLuan" local Luan = require "luan:Luan.luan" local error = Luan.error local set_metatable = Luan.set_metatable or error() local try = Luan.try or error() local Logging = require "luan:logging/Logging.luan" local logger = Logging.logger "Thread" local Thread = {} Thread.sleep = ThreadLuan.sleep local function safe(fn) return function(...) try( { fn catch = function(e) logger.error(e) end }, ... ) end end function Thread.fork(fn,...) fn = safe(fn) ThreadLuan.fork(fn,...) end function Thread.once(delay,fn,...) fn = safe(fn) ThreadLuan.schedule(delay,false,fn,...) end function Thread.repeating(delay,fn,...) fn = safe(fn) ThreadLuan.schedule(delay,true,fn,...) 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 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) local mt = {} function mt.__index(_,key) return function(...) return callable.call(key,...) end end local tbl = {} set_metatable(tbl,mt) return tbl end Thread.remove_global_callable = ThreadLuan.removeGlobalCallable local map = {} local fns = {} function fns.get(key) return map[key] end function fns.put(key,value) map[key] = value 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