![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2006
Сообщений: 9
|
Добрый день.
В скрипте мне нужно в цикле выполнять некие действия, которые занимают довольно длительное время, и я хотел бы информировать пользователя о прогрессе выполнения. Для этого я использую встроенный флешовый ProgressBar, и в цикле увеличиваю его значение. Проблема заключается в том, что из-за высокой нагрузки процессора во время выполения скрипта (до 100%) ProgressBar просто не успевает перерисовываться. Как мне указать флешу, чтобы он прорисовал ProgressBar, и только после этого приступил к следующей итерации цикла? Т.е. мне нужен, если кому известно, аналог Application.ProcessMessages из Delphi. Функции sleep() или аналога я тоже не нашёл - можно было бы попробовать приостановить выполнение скрипта на несколько милисекунд - по идее, флеш должен был бы высвободившееся процессорное время потратить на прорисовку ProgressBar. В общем, подскажите ![]() |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 221
|
Используй связку onEnterFrame(или setInterval) и for.
this.maxIteration = 100000;
this.curIteration = 5000;
this.count = 0;
this.maxCount = this.maxIteration/this.curIteration;
this.onEnterFrame = function(){
var p = (100*count)/this.maxCount;
preload_bar._xscale = p;
for(var i=0; i<this.curIteration; ++i){
//...
}
this.count++;
if(this.count == this.maxCount) delete this.onEnterFrame;
}
|
|
|||||
|
Регистрация: Feb 2006
Сообщений: 9
|
Спасибо. Так заработало. Только МЕДЛЕННО. Пытался выставить 24 или 36 FPS для флешки - метод отчего-то не стал вызываться быстрее. Вариант с setInterval не получился - setInterval постоянно возвращает undefined (я из метода класса создал функцию functionName в _root, и пытался на неё навесить setInterval - не помогло ни _root.functionName, ни просто functionName; также не удалось навесить setInterval на метод класса - что, впрочем, и неудивительно).
Как бы мне ускорить выполение? Не поддерживает ли Flash многопоточность? |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 221
|
1. Увеличение fps в пропертях должно непосредственно оказывать влияние на onEnterFrame, если конечно комп нормальный.
Можно увеличить значение curIteration. Что значит медленно? Сколько итераций в цикле? 2. Флеш не поддерживает многопоточность, хотя есть надежда на 9. Но можно моделировать с помощью внешней архитектуры (2 swf & LocalConnection). |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:41. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|