![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2009
Сообщений: 4
|
Как бы так поточнее объясниить суть проблемы...
Имеем: 1)MXML программу, то есть окошко, в котором есть прогрес бар. 2)AS3 паблик класс Engine, в котором есть функция run(), которая производит обсчет двумерной таблицы (ну например 10000х10000). 3)Экземпляр eng класса Engine создан и хранится в (1). Engine знает (по ссылке) о внешнем прогресс баре. 4) Внутри цикла функции run() установлена bar.setProgress(j,100), то есть я пытаюсь визуализировать процесс работы "движка". Почему никаких изменений в прогресс баре не происходит вплоть до окнчании работы функции run() - т.е. прогресс бар меняется только единожды - сразу на 100%. Тоже самое происходит если вместо прогресс бара использовать просто Label с текстом. Чего я не понимаю? |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
|
|
|||||
|
Регистрация: Nov 2009
Сообщений: 64
|
информации не достаточно, поэтому версии:
1) процесс обсчета занял все процессорное время, и тупо нет ресурсов еще что-то перерисовать. 2) binding сделан неверно. во |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 4
|
1) По поводу перерисовки - во Flex все так же ?
2)Какой инф. недостаточно? Ну попробую код выложить: MXML: ... 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"/> ... ... 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; } ... |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
|
|
|||||
|
Регистрация: Nov 2009
Сообщений: 4
|
так вопрос: есть ли возможность с помощью прогресс бара (или как то иначе) отобразить процесс работы долгой процедуры?
И здесь же спрошу: как я понял, AIR - это приложения только "устанавливаемые" на машину, и их нельзя включить в HTML или еще куда-то? |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
2. нельзя. |
|
|||||
|
Modus ponens
|
Выстaвьте какие-нибудь колбеки наружу типа:
Или разбейте длинную процедуру на много маленьких и в конце каждой части обновляйте прогрес бар. ПроцесРаннеров и т.п. в AS3 нету. Единственное но - во флеше есть ограничения на время выполнения. Если процесс не закончится по истечении определенног времени (во Флексе кажется по умолчанию 30 секунд), то получите ошибку. Ну и вообще, не стоит так делать. Флеш в таком случае может выбрать все ресурсы процессора и фактически повесит систему, ну, или как минимум браузер.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 10.12.2009 в 02:59. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Не понятно, каким образом это должно работать...
|
|
|||||
|
Modus ponens
|
Это не должно работать
Сорри, если так не понянто:
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 10.12.2009 в 16:19. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:23. |
|
|
« Предыдущая тема | Следующая тема » |
|
|