Я решил написать отдельный 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