Показать сообщение отдельно
  #1 (permalink)  
Старый 08.02.2010, 00:41
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

FThread, исполнение функций в отдельных потоках
Фабрика, создающая обёртку, которая запускает функцию в отдельном потоке в результате чего её падение не приводит к падению запустившего её кода. потоки не параллельны!

var FThread= new function(){
Version: 3
Descr: 'creates a wrapper for function that allows you to not be afraid of exceptions in'
License: 'public domain'

Implementation:
var root= document.documentElement
var FThread= function( proc ){
	var thread= root.addEventListener
	? function( ){
		var res, self= this, args= arguments
		root.addEventListener( 'launch thread', function( ){
			root.removeEventListener( 'launch thread', arguments.callee, false )
			res= thread.proc.apply( self, args )
		}, false )
		var event= document.createEvent( 'UIEvents' )
        event.initEvent( 'launch thread', false, false )
        root.dispatchEvent( event )
		return res
	}
	: function( ){
		var res, self= this, args= arguments
		root.attachEvent( 'onpropertychange', function( ){
			root.detachEvent( 'onpropertychange', arguments.callee )
			delete root[ 'launch thread' ]
			res= thread.proc.apply( self, args )
		} )
		root[ 'launch thread' ]= null
		return res
	}
	thread.proc= proc
	return thread
}

Export: return FThread

Usage:
var inverse= FThread(function( a ){
	if( a === 0 ) throw 'division by zero'
	return 1/a
})
console.log([ inverse( 0 ), inverse( 1 ) ])
// prints [ undefined, 1 ] and exception 'division by zero' in console log 

}
код не актуален ввиду новой версии: FTread, исполнение функций в отдельных потоках

Последний раз редактировалось tenshi, 09.02.2010 в 16:29.
Ответить с цитированием