/*
Para desactivar el multihilo basta con comentar todo el código aquí y poner los publish settings en actionscript 11.2
Recordar que action script 11.4 es el que tiene el soporte para multihilo y que no se puede debuguear
Para debuguear comentar todo el codigo de aqui y ponerlo en action script 11.2, es decir, desactivar el multihilo
*/
import flash.events.Event;
import flash.net.registerClassAlias;
import flash.system.MessageChannel;
import flash.system.Worker;
import flash.system.WorkerDomain;
import flash.system.WorkerState;
import flash.utils.ByteArray;
import flash.system.Capabilities; //trace(Capabilities.version);
var mainToWorker:MessageChannel;
var workerToMain:MessageChannel;
var workerToMainStartup:MessageChannel;
if (flash.system.Worker.current.isPrimordial)
{
var swfBytes:ByteArray = this.loaderInfo.bytes;
var bgWorker:flash.system.Worker = flash.system.WorkerDomain.current.createWorker(swfBytes,true);
// Send to worker
mainToWorker = Worker.current.createMessageChannel(bgWorker);
bgWorker.setSharedProperty("mainToWorker", mainToWorker);
// Receive from worker
workerToMain = bgWorker.createMessageChannel(Worker.current);
workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMain);
bgWorker.setSharedProperty("workerToMain", workerToMain);
// Receive startup message from worker
workerToMainStartup = bgWorker.createMessageChannel(Worker.current);
workerToMainStartup.addEventListener(Event.CHANNEL_MESSAGE, onWorkerToMainStartup);
bgWorker.setSharedProperty("workerToMainStartup", workerToMainStartup);
function onWorkerToMain(ev:Event): void
{
var elementoRecibido:* = workerToMain.receive(true);
//hacer algo que se ejecuta en el Main
}
function onWorkerToMainStartup(ev:Event): void
{
var elementoDeArranqueRecibido:* = workerToMainStartup.receive(true);
//hacer algo que se ejecuta en el Main al arrancar el worker
}
bgWorker.start();
}
else
{
function onMainToWorker(event:Event): void
{
hacerAlgo(); //hacer algún avance pequeño
}
mainToWorker = Worker.current.getSharedProperty("mainToWorker");
mainToWorker.addEventListener(Event.CHANNEL_MESSAGE, onMainToWorker);
// Send to main
workerToMain = Worker.current.getSharedProperty("workerToMain");
// Send startup message to main
workerToMainStartup = Worker.current.getSharedProperty("workerToMainStartup");
}
//generalmente utilizo funciones como variables que me permiten reemplazar las versiones multihilo por las versiones síncronas en cualquier momento
var hacerAlgo:Function;
//en la sección multihilo usaría
function hacerAlgo_VersionAsincrona():void
{
//aquí va lo que se hace realmente se hace
var algunObjeto:* = "lo que sea";
mainToWorker.send(algunObjeto);
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.