view core/src/luan/modules/ThreadLuan.java @ 326:db37d6aee4db

remove try-catch statement; add Luan.try() and Luan.pcall(); git-svn-id: https://luan-java.googlecode.com/svn/trunk@327 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Thu, 19 Mar 2015 00:01:57 +0000
parents a6bf8ff720f8
children c6bcb8859b93
line wrap: on
line source

package luan.modules;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import luan.Luan;
import luan.LuanState;
import luan.LuanFunction;
import luan.LuanTable;
import luan.LuanException;
import luan.DeepCloner;


public final class ThreadLuan {
	private static final Executor exec = Executors.newCachedThreadPool();

	public static void fork(LuanState luan,LuanFunction fn,Object... args) {
		DeepCloner cloner = new DeepCloner();
		final LuanState newLuan = cloner.deepClone(luan);
		final LuanFunction newFn = cloner.get(fn);
		final Object[] newArgs = cloner.deepClone(args);
		exec.execute(new Runnable(){public void run() {
			try {
				newLuan.call(newFn,"<forked>",newArgs);
			} catch(LuanException e) {
				e.printStackTrace();
			}
		}});
	}
}