Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с запуском отдельного Worker'a скомпилированного в FlasCC (http://www.flasher.ru/forum/showthread.php?t=196972)

Sinepym 01.04.2013 10:03

Проблема с запуском отдельного Worker'a скомпилированного в FlasCC
 
Я решил написать отдельный SWF на C++ с использованием нового компилятора FlasCC версии 1.0.1. Этот SWF должен запускаться в виде отдельного потока (Worker).

Когда я запуская из основного проекта новый Worker, то через секунд 10 он мне выдаёт ошибку: terminate called after throwing an instance of 'AS3::local::var'

Не могу понять из-за чего возникает эта ошибка. Уже всяко разно пробовал менять код, но результат один и тот же.

Код основного проекта:
Код AS3:

package 
{
        import flash.display.*;
        import flash.events.*;
        import flash.system.*;
        import flash.text.*;
        import flash.utils.*;
 
        public class Main extends Sprite
        {
                [Embed(source = "../SubWorker.swf", mimeType = "application/octet-stream")]
                private var BgWorker_ByteClass:Class;
 
                private var _workerToMain:MessageChannel;
                private var _mainToWorker:MessageChannel;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        var workerBytes:ByteArray = new BgWorker_ByteClass();
                        var newWorker:Worker = WorkerDomain.current.createWorker(workerBytes);
 
                        _workerToMain = newWorker.createMessageChannel(Worker.current);
                        _mainToWorker = Worker.current.createMessageChannel(newWorker);
 
                        newWorker.setSharedProperty("workerToMain", _workerToMain);
                        newWorker.setSharedProperty("mainToWorker", _mainToWorker);
 
                        _workerToMain.addEventListener(Event.CHANNEL_MESSAGE, onChannelMessageFromWorker);
 
                        newWorker.addEventListener(Event.WORKER_STATE, function():void
                        {
                                _mainToWorker.send(6);
                        });
 
                        newWorker.start();
                }
 
                private function onChannelMessageFromWorker(e:Event):void
                {
                        var value:int = _workerToMain.receive();
                        trace(value);
                }
        }
}

Код Worker'a:
Код AS3:

#include <pthread.h>
 
#include <AS3/AS3.h>
#include <Flash++.h>
 
using namespace AS3::local;
 
static flash::system::MessageChannel mainToWorker;
static flash::system::MessageChannel workerToMain;
 
static var channelMessageEventListener(void *arg, var as3Args)
{
        var msg = mainToWorker->receive();
        int number = _int(msg)->valueOf();
 
        workerToMain->send(_int::_new(number * 2));
 
        return internal::_undefined;
}
 
int main()
{
        flash::system::Worker worker = internal::get_Worker();
        mainToWorker = worker->getSharedProperty("mainToWorker");
        workerToMain = worker->getSharedProperty("workerToMain");
 
        mainToWorker->addEventListener(flash::events::Event::CHANNEL_MESSAGE,
                Function::_new(channelMessageEventListener, NULL));
 
        AS3_GoAsync();
}

Ошибка, скорее всего, происходит здесь: mainToWorker->addEventListener


Часовой пояс GMT +4, время: 02:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.