Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.04.2013, 10:03
Sinepym вне форума Посмотреть профиль Отправить личное сообщение для Sinepym Найти все сообщения от Sinepym
  № 1  
Ответить с цитированием
Sinepym

Регистрация: Oct 2012
Сообщений: 12
The bomb! Проблема с запуском отдельного 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, время: 20:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
flascc , workers
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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