Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   setInterval (http://www.flasher.ru/forum/showthread.php?t=78056)

K.A.T.A.F.A.L.K.E.R 07.04.2006 19:29

setInterval
 
Столкнулся с такой траблой. Есть у меня свф-ка, я ее подгружаю в какой-нить контейнер, делаю на всяк. случай _lockroot=true (это я так, к слову), и спустя несколько секунд подгруженный мув удаляю. Да только проблема: та свф-ка практически беспорядочно (так задумано) создает интервалы через setInterval и после ее удаления интервалы остаются и продолжают выполняться :eek: Как бы логично ли это? Ведь после этого у меня мой мув в трейс начинает выводить гадость типа
Код:

"*** Security Sandbox Violation ***
SecurityDomain [подгруженная свф-ка] tried to access incompatible context [мой мув]"

...
И если это логично - как можно очистить интервалы, если их id я не знаю и узнать не могу? Первую тысЧу чистить, что ли???

KPaul 07.04.2006 19:39

Это логично.
Возможно не самый личший способ очистки всех интервалов:
Код:

for(var i = setInterval(function(){}, 100); i>0; --i){
        clearInterval(i);
}


silin 08.04.2006 16:19

такой способ тут однажды обсуждался:в самом setInterval создаем массив, где и храним все запущенные интервалы,
добавляем метод очищающий все интрвалы из этого массива
Код:

//        Переписываем  setInterval
_global.setInterval = function () {
        if (!_global.setInterval.interval) {
                _global.setInterval.interval = [];
                _global.clearIntervalAll = function () {
                        for (arg in _global.setInterval.interval) {
                                clearInterval (_global.setInterval.interval[arg]);
                        }
                };
        }
        _global.setInterval.interval[_global.setInterval.interval.length] = ASnative (250, 0).apply (_global, arguments);
};

//запускаем
setInterval (function () {trace ("U  " + getTimer ())}, 500);
setInterval (function () {trace ("U2  " + getTimer ())}, 100);
//по клику очищаем все
onMouseUp=function(){
        clearIntervalAll();
}


iNils 08.04.2006 16:37

http://www.flasher.ru/forum/showthre...t=65735&page=1

K.A.T.A.F.A.L.K.E.R 08.04.2006 20:58

Спасибо, но не в этом суть... Почему флеш ругается на попытки этого setInterval-а вызвать функцию после сноса загруженного мува? Как-то это странно. Мува уже давно нету, но в трейсе - предупреждения о попытке доступа именно из этого мува! С указанием его имени! Т.е. флеш запоминает что метод был вызван именно из подгруженного ролика, т.е. каким-то образом РАЗЛИЧАЕТ интервалы "свои" и интервалы "подгруженные", так почему же он не сносит их после удаления подгруженного ролика? :o

silin 08.04.2006 21:23

да вобщем setInterval глобальная функция, стало быть ей поровну откуда ее вызвали.., но вот что и где хранится о запущенных интервалах не ясно, зато ясно, что их надо очищать, потому как раз где-то остается ссылка на объект или функцию, то и объект не будет удален из памяти..

AxelRB 10.04.2006 12:40

Цитата:

Сообщение от silin
но вот что и где хранится о запущенных интервалах не ясно

У меня вообще такое подозрение, что setInterval вызывает системную функцию createTimer (если для винды). В этом случае вся информация о таймерах хранится в системе.


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

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