Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Периодический вызов ф-ии (http://www.flasher.ru/forum/showthread.php?t=97541)

DimG 23.06.2007 14:31

Периодический вызов ф-ии
 
Всем привет!
такой вопрос по классу Timer:
1) Если таймер отсылает события для вызова ф-ии каждые 500 миллисекунд, то 500 миллисекунд это время между ВЫЗОВАМИ функции,или время от ЗАВЕРШЕНИЯ "предыдущей" до ВЫЗОВА "следующей"?
2) Соответственно из этого вытекает следующий: если эта функция выполняется, скажем, одну секунду, то как поведет себя таймер(т.е. следующая ф-ия вызовется сразу же после завершения предыдущей или таймер подождет полсекунды)?

Заранее спасибо!

etc 23.06.2007 14:41

1) Между.
2) Либо сразу выполнит, либо подожет положенные полсекунды. Сложно сказать, я не пробовал.

DimG 23.06.2007 19:12

>> 1) Между

между чем и чем?(там в обоих случаях между)))))

DimG 24.06.2007 00:32

Проделал эксперимент: в вызываемой ф-ии сделал трэйс "call from func...", в нее засунул цикл for(var i=0;i<1600000;i++){}, а далее опять трэйс "finish"(частота проца - 1,7 Мг). в конструкторе класса создал timer(1000,0)
по идее эта функция должна выполняться около одной секунды, при этом:
1) если вызов ф-ии происходи через секунду после пред. вызова,то моя ф-ия должна выводить трэйс примерно через каждую секунду;
2) если вызов происходит через секунду после окнчания выполнения функции,то трэйс должен выполняться раз в примерно две секунды.

По логике вещей timer на то и timer,чтобы вызывать ф-ию с УКАЗАННОЙ частотой. Эксперимент примерно это и показывает - трэйс появляется с частотой примерно каждую 1.3 секунды. Наверно это сказывается из-за некоторой тормознутости интерпретатора AVM и ,возможно, трэйса.

Если сделать ф-ию, выполняющуюся более одной секунды:

создал такой код:
Код:

package main
{
        import flash.display.*;
        import flash.events.*;
        import flash.utils.*;

        public class main extends Sprite
        {
                var my_timer:Timer = new Timer(3000,0);
                public function main()
                {
                        my_timer.addEventListener(TimerEvent.TIMER,t);
                        my_timer.addEventListener(TimerEvent.TIMER,tr);
                        my_timer.start();
                       
                       
                }
                public function t(e:TimerEvent)
                {
                        trace("call from timer");
                }
                public function tr(e:TimerEvent)
                {
                        trace("function tr() is starting");
                        for (var i=0;i<16000000;i++){if(i%100000==0)trace(i);}
                        trace("finish");
                        trace("/////////////") ;
                }
        }
}


При этом ф-ия выполняется секунды четыре и ЖДЕТ еще секунды три (это слышно по жужжания проца - сильно грузит) Логика вообще непонятна. Если не трудно,объясните плиз

СПС

etc 24.06.2007 13:37

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

DimG 24.06.2007 18:48

Спасибо)


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

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