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

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

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

Регистрация: Nov 2009
Сообщений: 4
Question mx:ProgressBar

Как бы так поточнее объясниить суть проблемы...

Имеем:
1)MXML программу, то есть окошко, в котором есть прогрес бар.
2)AS3 паблик класс Engine, в котором есть функция run(), которая производит обсчет двумерной таблицы (ну например 10000х10000).
3)Экземпляр eng класса Engine создан и хранится в (1). Engine знает (по ссылке) о внешнем прогресс баре.
4) Внутри цикла функции run() установлена bar.setProgress(j,100), то есть я пытаюсь визуализировать процесс работы "движка".

Почему никаких изменений в прогресс баре не происходит вплоть до окнчании работы функции run() - т.е. прогресс бар меняется только единожды - сразу на 100%.

Тоже самое происходит если вместо прогресс бара использовать просто Label с текстом.

Чего я не понимаю?

Старый 09.12.2009, 02:20
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Чего я не понимаю?
Того, что сначала выполняется код в текущем кадре, а перерисовка происходит при переходе не следующий. А на следующий флеш не перейдет до тех пор, пока в предыдущем все вычисления не будут произведены.

Старый 09.12.2009, 10:13
bastrakov вне форума Посмотреть профиль Отправить личное сообщение для bastrakov Найти все сообщения от bastrakov
  № 3  
Ответить с цитированием
bastrakov

Регистрация: Nov 2009
Сообщений: 64
информации не достаточно, поэтому версии:
1) процесс обсчета занял все процессорное время, и тупо нет ресурсов еще что-то перерисовать.
2) binding сделан неверно.
во

Старый 09.12.2009, 10:58
xsingami вне форума Посмотреть профиль Отправить личное сообщение для xsingami Найти все сообщения от xsingami
  № 4  
Ответить с цитированием
xsingami

Регистрация: Nov 2009
Сообщений: 4
1) По поводу перерисовки - во Flex все так же ?

2)Какой инф. недостаточно?

Ну попробую код выложить:

MXML:
Код AS3:
...
import my.engine.Engine;
private var eng:Engine = new Engine();
...
protected function goButton_Handler(event:MouseEvent):void
		{
			var a:Array;
			eng.bar = this.bar;
			a = eng.calcRealGrid(Number(iMaxX.text),Number(iMaxY.text),Number(iN.text),
												Number(iK.text),iRF.text);
		}
...
<mx:ProgressBar width="100%" minimum="0" maximum="100" indeterminate="true" enabled="true" id="bar"/>
...
Engine.as
Код AS3:
...
public dynamic class Engine
	{
		private var parser:Parser;
		public var bar:ProgressBar;
 
		public function Engine()
		{
			parser = new Parser(["x","y"]);
		}
...
public function calcRealGrid(maxX:Number,maxY:Number,N:Number, K:Number,RFuncExpr:String):Array{
			var grid:Array = createGrid(N+1,K+1);
			var func:Func = new Func(parser,RFuncExpr);
			var dx:Number = maxX/N;
			var dy:Number = maxY/K;
 
			for(var k:int = 0;k<K+1;k++){
 
				bar.setProgress(k*100/K,100);
				bar.label = k*100/K + "%";
 
				for(var i:int = 0;i<N+1;i++){
					grid[k][i] = func.eval([dx*i,dy*k]);
				}
			}
			return grid;
		}
...

Старый 09.12.2009, 11:23
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
1) По поводу перерисовки - во Flex все так же ?
Flex -- это надстройка над AS3.0. Фреймворк написанный на AS3.0. Естественно, все также.

Старый 10.12.2009, 01:01
xsingami вне форума Посмотреть профиль Отправить личное сообщение для xsingami Найти все сообщения от xsingami
  № 6  
Ответить с цитированием
xsingami

Регистрация: Nov 2009
Сообщений: 4
так вопрос: есть ли возможность с помощью прогресс бара (или как то иначе) отобразить процесс работы долгой процедуры?

И здесь же спрошу:

как я понял, AIR - это приложения только "устанавливаемые" на машину, и их нельзя включить в HTML или еще куда-то?

Старый 10.12.2009, 01:09
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от xsingami Посмотреть сообщение
так вопрос: есть ли возможность с помощью прогресс бара (или как то иначе) отобразить процесс работы долгой процедуры?

И здесь же спрошу:

как я понял, AIR - это приложения только "устанавливаемые" на машину, и их нельзя включить в HTML или еще куда-то?
1. никак.
2. нельзя.

Старый 10.12.2009, 02:55
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Выстaвьте какие-нибудь колбеки наружу типа:
Код AS3:
while (i++ < Infinity)
{
    if (!(i % 1000)) updateProgressBar();
}
Или разбейте длинную процедуру на много маленьких и в конце каждой части обновляйте прогрес бар. ПроцесРаннеров и т.п. в AS3 нету.

Единственное но - во флеше есть ограничения на время выполнения. Если процесс не закончится по истечении определенног времени (во Флексе кажется по умолчанию 30 секунд), то получите ошибку. Ну и вообще, не стоит так делать. Флеш в таком случае может выбрать все ресурсы процессора и фактически повесит систему, ну, или как минимум браузер.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 10.12.2009 в 02:59.
Старый 10.12.2009, 05:09
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 9  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Выстaвьте какие-нибудь колбеки наружу типа:
Код AS3:
while (i++ < Infinity)
{
    if (!(i % 1000)) updateProgressBar();
}
Не понятно, каким образом это должно работать...

Старый 10.12.2009, 16:15
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Это не должно работать Сорри, если так не понянто:
Код AS3:
var i:int;
var lastTimeUpdated:int;
while (i++ < 10000)
{
    if ((i * 100 / 10000) >> 0 > lastTimeUpdated)
    {
        lastTimeUpdated = i * 100 / 10000;
        updateProgressBar(i / 10000);
    }
}
function updateProgressBar(percent:Number):void
{
	trace(percent);
}
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 10.12.2009 в 16:19.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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