![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
|
Всем привет!
такой вопрос по классу Timer: 1) Если таймер отсылает события для вызова ф-ии каждые 500 миллисекунд, то 500 миллисекунд это время между ВЫЗОВАМИ функции,или время от ЗАВЕРШЕНИЯ "предыдущей" до ВЫЗОВА "следующей"? 2) Соответственно из этого вытекает следующий: если эта функция выполняется, скажем, одну секунду, то как поведет себя таймер(т.е. следующая ф-ия вызовется сразу же после завершения предыдущей или таймер подождет полсекунды)? Заранее спасибо! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
1) Между.
2) Либо сразу выполнит, либо подожет положенные полсекунды. Сложно сказать, я не пробовал. |
|
|||||
|
Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
|
>> 1) Между
между чем и чем?(там в обоих случаях между))))) Последний раз редактировалось DimG; 23.06.2007 в 23:13. |
|
|||||
|
Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
|
Проделал эксперимент: в вызываемой ф-ии сделал трэйс "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("/////////////") ;
}
}
}
При этом ф-ия выполняется секунды четыре и ЖДЕТ еще секунды три (это слышно по жужжания проца - сильно грузит) Логика вообще непонятна. Если не трудно,объясните плиз СПС |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Флеш однопоточен, интервал работает в том же потоке, что и функция. Т.е. выполнение функции считается единовременным (хотя это в реальности далеко не так), следовательно интервал в момент выполнения функции простаивает и не выполняет отсчет времени. В хелпе насчет таймеров и прочего написано, что эти вещи не являются точными, есть множество зависимостей, в т.ч. framerate.
|
|
|||||
|
Регистрация: May 2006
Адрес: Moscow
Сообщений: 40
|
Спасибо)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 15:03. |
|
|
« Предыдущая тема | Следующая тема » |
|
|