2017-01-28 21 views
2

У меня есть тяжелая функция, которая не подходит для выполнения на основной временной шкале (потому что она занимает много времени, чтобы завершить работу и сбой программы) , поэтому я искал многопоточность в воздухе (as3), но все примеры, которые я нашел, объяснили, как запускать отдельные swf-файлы в рабочих. Как я могу запустить функцию в рабочем (потоке)?adobe air AS3: Как запустить функцию в worker_ Многопоточность (от Workers)

ответ

2

Официальный рабочий документ (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html): Каждый дополнительный работник создается из отдельного 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 
    } 
} 
+1

благодарит дорогие Organis, я пользователь из ирана и самана заблокировал наш IP, пожалуйста, вы можете разместить пример для «запуска основного SWF в двух рабочих» –

+1

Done. Вы также можете использовать некоторый прокси-сервер anonymizer онлайн, который позволит решить эту неудобную блокировку для вас. – Organis

+1

@AmirRasti, если вы используете браузер Chrome, попробуйте расширение для него под названием UltraSurf VPN. Также получите AdBlock. Затем вы можете видеть, что любой веб-сайт в мире разблокирован. –