adobe air AS3:如何 运行 workers_ Multithreading 中的函数(由 Workers 提供)
adobe air AS3 :How to run a function in workers_ Multithreading (by Workers)
我有一个繁重的功能不适合在主时间线上执行(因为它需要很长时间才能完成并导致程序崩溃)。
因此我在 air(as3) 中搜索了多线程,但我找到的所有示例都解释了如何 运行 在 worker 中分离 swf 文件。我如何 运行 worker(线程)中的函数?
官方 worker 文档(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html):每个额外的 worker 都是从一个单独的 swf 创建的。
因此,您要么将繁重的代码安排为额外的 SWF,要么对其进行重构,以便您可以暂停和恢复它并将其执行分散到多个帧(ENTER_FRAME 事件,而不是时间轴帧,ofc ).
P.S。在同一个文档页面上,有一种方法可以在两个工作程序中 运行 主 SWF,因此您可以将其分叉到控制应用程序和工作程序应用程序中。
// The primordial worker's main class constructor
public function PrimordialWorkerClass()
{
init();
}
private function init():void
{
var swfBytes:ByteArray = this.loaderInfo.bytes;
// Check to see if this is the primordial worker
if (Worker.current.isPrimordial)
{
// create a background worker
var bgWorker:Worker = WorkerDomain.current.createWorker(swfBytes);
// listen for worker state changes to know when the worker is running
bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler);
// set up communication between workers using
// setSharedProperty(), createMessageChannel(), etc.
// ... (not shown)
bgWorker.start();
}
else // entry point for the background worker
{
// set up communication between workers using getSharedProperty()
// ... (not shown)
// start the background work
}
}
我有一个繁重的功能不适合在主时间线上执行(因为它需要很长时间才能完成并导致程序崩溃)。 因此我在 air(as3) 中搜索了多线程,但我找到的所有示例都解释了如何 运行 在 worker 中分离 swf 文件。我如何 运行 worker(线程)中的函数?
官方 worker 文档(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html):每个额外的 worker 都是从一个单独的 swf 创建的。
因此,您要么将繁重的代码安排为额外的 SWF,要么对其进行重构,以便您可以暂停和恢复它并将其执行分散到多个帧(ENTER_FRAME 事件,而不是时间轴帧,ofc ).
P.S。在同一个文档页面上,有一种方法可以在两个工作程序中 运行 主 SWF,因此您可以将其分叉到控制应用程序和工作程序应用程序中。
// The primordial worker's main class constructor
public function PrimordialWorkerClass()
{
init();
}
private function init():void
{
var swfBytes:ByteArray = this.loaderInfo.bytes;
// Check to see if this is the primordial worker
if (Worker.current.isPrimordial)
{
// create a background worker
var bgWorker:Worker = WorkerDomain.current.createWorker(swfBytes);
// listen for worker state changes to know when the worker is running
bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler);
// set up communication between workers using
// setSharedProperty(), createMessageChannel(), etc.
// ... (not shown)
bgWorker.start();
}
else // entry point for the background worker
{
// set up communication between workers using getSharedProperty()
// ... (not shown)
// start the background work
}
}