view src/luan/modules/Thread.luan @ 1188:9f5edbef3f55

remove old web log files
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 22 Feb 2018 23:21:06 -0700
parents 7ef40e1923b7
children 3fad7091b419
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 Thread = {}

Thread.fork = ThreadLuan.fork
Thread.schedule = ThreadLuan.schedule
Thread.sleep = ThreadLuan.sleep

function Thread.safe(fn,logger)
	return function()
		try {
			function()
				fn()
			end
			catch = function(e)
				logger.error(e)
			end
		}
	end
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