Тестирование выполнения js функций в отдельном потоке

JS Объект Thread запускает контекст выполнения в отдельном потоке
 и ждет внешние запросы на выполнение из основного поста, где он был создан.

При создании объекта Thread в аргументах указывается js файл с функциями, которые нужно выполнять в отдельном потоке

---------------------------------------
init_thr.js: содержимое (внимание, соединять сигналы со слотами в поточном файле не рекомендуется)


post.evalScript('jcjsHelper.js')

function main(arg1,arg2,arg3){
  console.log(arg1,arg2,arg3)

  return {arg1: arg1, arg2: arg2, arg3: arg3, tm: +new Date()}
}
---------------------------------------


Если файл не найден, то будет создан js exception
var thr = new Thread('init_thr.js')

Если указать при создании дефолтную потоковую функцию, то при вызове thr.eval() можно не указывать ее имя
! имя функций не может содержать небуквенные символы
! main_1 - будет ошибка

var thr = new Thread('init_thr.js', 'main')


var arg1 = 'string1'
var arg2 = {obj1: 1}
var arg3 = 1

function callBack(ret){ // функция, вызываемая при завершении функции init_thr.js: main()

  var objDesc = arguments[arguments.length - 1]
  // последний аргумент всегда содержит в себе объект objDesc
  //{"error":0,"file":"init_thr.js","fn":"main","thread":"0x3145750"}

  //  ret содержит объект который вернула функция init_thr.js: main()
  // {arg1: 'string1, arg2: {obj1: 1}, arg3: 1, tm: 12234353252345}

  var ar = [].slice.call(arguments)
  post.log(JSON.stringify(ar))
}


thr.eval('main', callBack, [arg1,arg2,arg3])

если указана дефолтная функция, то 'main' можно не указывать
thr.eval(callBack, [arg1,arg2,arg3])


порядок аргументов не имеет значения. eval автоматически их распознает
thr.eval([arg1,arg2,arg3], callBack)
thr.eval([arg1,arg2,arg3], callBack, 'main')

