Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 3 > Зависание при громозких вычислениях


Автор: cbcboss 5.2.2012, 18:24
Имеется кучка массивов, кот. необходимо обработать.

код типа следующего =>

Код

on (press){
for (var i in Arr1)
    for (var k in Arr2)
        for (var m in Arr3) {
            ... обработка данных (допустим занимает 0.1 сек)
        }
}


если в массивах по 100 элементов то это дело занимает достаточно много времени.

Вопрос: есть ли такая функция, кот. передала управление самой флэш ( т.е. обновила графику пользователя и т.п. ), чтоб как такового зависания не наблюдалось.

и после обработки вставить эту ф-ю.

код по тип такого будет

Код


function AntiZZZ(){ //антизависание
    _root.Progress++; //эт для отображения прогресса выполнения вычислений
    ???XXX???(); //эт функция , передающая управление основной программе.
}

on (press){
for (var i in Arr1)
    for (var k in Arr2)
        for (var m in Arr3) {
            ... обработка данных (допустим занимает 0.1 сек)
            AntiZZZ();
        }
}


Пробовал в поисховике эт дело найти, но точно не знаю как его обозвать и поэтому толком поисховик путёвого ничего не выдаёт.
Заранее, СПАСИБО !

Автор: SoWa 5.2.2012, 18:48
Как вариант, можешь в SetInterval отправить эту функцию, получится эдакое таймерное распараллеливание.
Главное - продумать, как грамотно кадр построить, где у тебя бедт таймер и как сделать, чтобы он не блокировал выполнение графики. Т.е. SetInterval ты модешь скормить функцию, которая будет изменять некую глобальную переменную, которая будет отображаться в каком-нибудь поле.

Автор: cbcboss 5.2.2012, 19:00
ага ... можно и через таймер, тока вот код получится запутанней ... и на слабеньком компьютере ( если выполнение ф-и займёт 1-5 сек ) ... НАВЕРНО всё зависнет пока не закончится цикл ( а может и нет ... если добавить проверку по времени между окончанием предыдущего выполнения ф-и и её послед. началом).

ща гуглил. Возникла идейка.
Флэш имеет fps,  отсюда
по окончании кода он "грубо" запускает его заново. (onEnterFrame)

Вот мне бы эту функцию, кот. запускает весь код, или же просто обновляет графику объектов (не вызывая события, чтоб ... заново не вызвать циклы).
Или же нет такого?

... a пока что будемс юзать SetInterval.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)