2017-01-28 1 views
2

Ich habe eine schwere Funktion, die nicht ordnungsgemäß in der Hauptzeitleiste ausgeführt werden (weil es eine lange Zeit dauert, um beendet zu werden und das Programm abstürzt) . daher habe ich nach Multithreading in Luft (as3) gesucht, aber alle Beispiele, die ich gefunden habe, hat erklärt, wie man separate swf-Dateien in Arbeitern. Wie kann ich eine Funktion in einem Arbeiter (Thread) ausführen?Adobe Air AS3: Wie man eine Funktion in Worker_ Multithreading (von Arbeitnehmern)

Antwort

2

Offizielle Worker-Dokumentation (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html): Jeder zusätzliche Worker wird aus einem separaten swf erstellt.

Sie müssen entweder Ihren schweren Code als zusätzliche SWF-Datei anordnen oder umformatieren, damit Sie ihn anhalten und fortsetzen und seine Ausführung über mehrere Frames (ENTER_FRAME-Events, nicht Timeline-Frames, ofc) verteilen können.

P.S. Auf der gleichen Dokumentationsseite gibt es eine Möglichkeit, die Haupt-SWF in zwei Works auszuführen, sodass Sie sie in die Steuerung von Anwendungs- und Workeranwendungen einteilen können.

// 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

lieben dank Organis, ich bin ein Benutzer aus dem Iran und Adobe unsere IP blockiert ist, können Sie bitte ein Beispiel für Post –

+1

Done „Haupt-SWF in zwei Arbeiter laufen“. Sie können auch einen Online-Anonymisierungs-Proxy verwenden, der diese unbequeme Blockade für Sie löst. – Organis

+1

@AmirRasti Wenn Sie den Chrome-Browser verwenden, versuchen Sie eine Erweiterung namens UltraSurf VPN. Holen Sie sich auch AdBlock. Dann können Sie jede Webseite der Welt sehen, die nicht blockiert ist. –