Просмотр полной версии : Периодический вызов ф-ии
Всем привет!
такой вопрос по классу Timer:
1) Если таймер отсылает события для вызова ф-ии каждые 500 миллисекунд, то 500 миллисекунд это время между ВЫЗОВАМИ функции,или время от ЗАВЕРШЕНИЯ "предыдущей" до ВЫЗОВА "следующей"?
2) Соответственно из этого вытекает следующий: если эта функция выполняется, скажем, одну секунду, то как поведет себя таймер(т.е. следующая ф-ия вызовется сразу же после завершения предыдущей или таймер подождет полсекунды)?
Заранее спасибо!
1) Между.
2) Либо сразу выполнит, либо подожет положенные полсекунды. Сложно сказать, я не пробовал.
>> 1) Между
между чем и чем?(там в обоих случаях между)))))
Проделал эксперимент: в вызываемой ф-ии сделал трэйс "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("/////////////") ;
}
}
}
При этом ф-ия выполняется секунды четыре и ЖДЕТ еще секунды три (это слышно по жужжания проца - сильно грузит) Логика вообще непонятна. Если не трудно,объясните плиз
СПС
Флеш однопоточен, интервал работает в том же потоке, что и функция. Т.е. выполнение функции считается единовременным (хотя это в реальности далеко не так), следовательно интервал в момент выполнения функции простаивает и не выполняет отсчет времени. В хелпе насчет таймеров и прочего написано, что эти вещи не являются точными, есть множество зависимостей, в т.ч. framerate.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.