Przemysław Słota

Przemysław Słota Scrum Master/
Product Owner /
Technical Project
Manager (...

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Witam,

jaki jest maksymalna wartość milisekund którą można przekazać do Timera ?

Chciałem zrobić delay ustawiony na np 30 dni (2592000000 ms - nie jest to poza zasięgiem zmiennej typu Number) i funkcja odpala mi się non stop.

Sprawdźcie ten kod:

var periodicTimer:Timer = new Timer( 2592000000 );
periodicTimer.addEventListener( TimerEvent.TIMER, activatePeriodically );
periodicTimer.start();

private function activatePeriodically( e:TimerEvent ) : void
{ trace( 'activate !!!' ); }


Jeśli nie to, to co waszym zdaniem byłoby najlepszym wyjściem aby odpalać funkcję co miesiąc, pół roku, rok itd. ?Przemysław Słota edytował(a) ten post dnia 13.10.10 o godzinie 17:03
Adrian Z.

Adrian Z. flash animator/
flash developer

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Może lepiej sprawdzać po prostu aktualną datę/godzinę
Przemysław Słota

Przemysław Słota Scrum Master/
Product Owner /
Technical Project
Manager (...

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Problem w tym że aplikacja będzie non stop odpalona i powiedzmy że interesuje mnie konkretna godzina i minuty za rok, powiedzmy 14.10.2010 13:17 więc nie chciałbym przez cały rok sprawdzać co minutę czy funkcja powinna zostać już odpalona.
Przemysław Słota

Przemysław Słota Scrum Master/
Product Owner /
Technical Project
Manager (...

Temat: [AS3] Timer - jaki jest maksymalny delay ?

rozwiązałem to na około poprzez zmianę 2 linijek


var periodicTimer:Timer = new Timer( 86400000, 365);

periodicTimer.addEventListener( TimerEvent.TIMER_COMPLETE, activatePeriodically );


a następnie w metodzie activatePeriodically resetuję timera i puszczam od nowa.

Jeśli jednak ktoś zna lepszy sposób to z chęcią go poznam ;)

P.S. oczywiście 86400000 to liczba milisekund w ciągu jednego dniaPrzemysław Słota edytował(a) ten post dnia 14.10.10 o godzinie 08:44

konto usunięte

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Przemysław Słota:
Problem w tym że aplikacja będzie non stop odpalona i powiedzmy że interesuje mnie konkretna godzina i minuty za rok, powiedzmy 14.10.2010 13:17 więc nie chciałbym przez cały rok sprawdzać co minutę czy funkcja powinna zostać już odpalona.


Jak timer ma non-stop liczyć delay to wole co minute sprawdzać czas :)
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: [AS3] Timer - jaki jest maksymalny delay ?

setInterval na minutę i w funkcji którą wywołuje porównuj bieżącą datę z deadlinem.

Jeśli aplikacja ma działać cały czas to uważaj na pamięć Są przypadki w których Fl nie zwalnia pamięci chociaż powinien(przynajmniej w wersji 9).
Przemysław Słota

Przemysław Słota Scrum Master/
Product Owner /
Technical Project
Manager (...

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Pamięć sprawdzam profilerem więc nie ma problemu. Tutaj tylko pojawił mi się problem z tym parametrem Timera - delay, który niby jest typu Number ale jak widać wewnętrznie musi go gdzieś rzutować na int bo maksymalna wartość dla której działa to 2147483647. Przy większych odpala zadaną funkcję non stop ;)
Jakub K.

Jakub K. iOS developer

Temat: [AS3] Timer - jaki jest maksymalny delay ?

a nie boisz się dokładności timera? Jak kiedyś robiłem testy to już po kilku minutach różnica z czasem systemowym wynosiła kilka sekund, po całym dniu kilka, kilkanaście minut...
Przemysław Słota

Przemysław Słota Scrum Master/
Product Owner /
Technical Project
Manager (...

Temat: [AS3] Timer - jaki jest maksymalny delay ?

No i to jest mocny argument. Po testach faktycznie to rozwiązanie się nie nadaje do użytkowania z powodu dużej granicy błędu dla tak długich czasów.

konto usunięte

Temat: [AS3] Timer - jaki jest maksymalny delay ?

To co napisal Jerzy czyli powrownywanie czasu z deadlinem wydaje sie najrozsadniejsze chocby ze wzgledu na mozliwosc przerwania dzialania aplikacji. Z interwalem 30 dniowym tracisz wszystko, a w powyzszym przykladzie odplasz ponownie i dalej sobie sprawdza.
Co to wgl za aplikacja, ktora ma dzialac non stop? :)
Przemysław Słota

Przemysław Słota Scrum Master/
Product Owner /
Technical Project
Manager (...

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Z przerwaniem działania aplikacji nie ma problemu bo po jej uruchomieniu wyliczany był czas pierwszego odpalenia metody a dopiero potem ustawiany był określony period ( godzina, dzień, tydzień, miesiąc, itd. ) Jednak okresy od miesiąca wzwyż nie są już obsługiwane przez timer - w sumie słusznie patrząc na jego niedokładność.

Swoją drogą czy setInterval to nie jest przeżytek z AS2 i wprowadzony do języka tylko dla tych którzy z tą metodą się mocno zżyli ?? :) Nawet w manualu jest napisane aby rozważyć użycie klasy Timer.

A aplikacja jest uruchomiona w lokalach na TV i wyświetla informacje wg dostarczonych terminarzy ;) TV jest włączone non stop (pomijając awarie w elektrowni)
Piotr Mederak

Piotr Mederak Development Team
Leader

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Przemysław Słota:
No i to jest mocny argument. Po testach faktycznie to rozwiązanie się nie nadaje do użytkowania z powodu dużej granicy błędu dla tak długich czasów.

To nie jest blad. Jest to opisane w dokumentacji. Timer dziala w oparciu o FPSy. Jesli ustawimy ich bardzo duzo, timer bedzie dokladny.

"Depending on the SWF file's framerate or Flash Player's environment (available memory and other factors), Flash Player or Adobe AIR may dispatch events at slightly offset intervals. For example, if a SWF file is set to play at 10 frames per second (fps), which is 100 millisecond intervals, but your timer is set to fire an event at 80 milliseconds, the event will be dispatched close to the 100 millisecond interval."
http://www.adobe.com/livedocs/flash/9.0/ActionScriptLa...
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Przemysław Słota:
Z przerwaniem działania aplikacji nie ma problemu bo po jej uruchomieniu wyliczany był czas pierwszego odpalenia metody a dopiero potem ustawiany był określony period ( godzina, dzień, tydzień, miesiąc, itd. ) Jednak okresy od miesiąca wzwyż nie są już obsługiwane przez timer - w sumie słusznie patrząc na jego niedokładność.

Swoją drogą czy setInterval to nie jest przeżytek z AS2 i wprowadzony do języka tylko dla tych którzy z tą metodą się mocno zżyli ?? :) Nawet w manualu jest napisane aby rozważyć użycie klasy Timer.
setInterval to funkcja jak każda inna. Po to jest by jej używać- byle tylko z głową. Napewno lepiej ustawić setInterval na minutę niż sprawdzać na Enter_FRAME albo timerze który się rozjeżdża (zresztą nie tylko we flashu):]
Co do Timera to tak jak Piotr napisał. Wszytko jest w dokumentacji i timer nie nadaje się do zastosowania o którym piszesz:)
Swoja drogą długi watek jak na taki problem:)Jerzy Wierzchowski edytował(a) ten post dnia 15.10.10 o godzinie 12:47
Przemysław Słota

Przemysław Słota Scrum Master/
Product Owner /
Technical Project
Manager (...

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Jerzy Wierzchowski:

Swoja drogą długi watek jak na taki problem:)
Myślę że jest odpowiedniej długości - w końcu każdy post jest na temat ;)
Jerzy Wierzchowski:

Napewno lepiej ustawić setInterval na minutę niż sprawdzać na Enter_FRAME albo timerze który się rozjeżdża (zresztą nie tylko we flashu):]
Co do Timera to tak jak Piotr napisał. Wszytko jest w dokumentacji i timer nie nadaje się do zastosowania o którym piszesz:)

A myślicie że setInterval w podanym przypadku - 10 FPS co daje klatkę co 100 ms - przy ustawieniu przedziału na 80 ms będzie bardziej dokładne? Nie sądze ;)Przemysław Słota edytował(a) ten post dnia 15.10.10 o godzinie 13:37
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Oki doki:)
Nie chodzi o dokładność samego setInterval bo nie chcę zliczać jego wywołań. Chodziło mi o to ze lepiej sprawdzać czas porównując datę a nie zliczać go timerem. Tutaj niedokładność będzie na poziomie rozdzielczości interwału +-niedokładność JEDNEGO wywołania, a nie sumy niedokładności wszystkich wywołań timera (z których każdy inkrementuje jego licznik).

Oczywiście porównywać daty można użyć setInterval ale też na zdarzenie timera, tutaj przydało by się jednak co pewien czas go zresetować by się "nie przekręcił".
Resumując:
Nie licz ilości wywołań Timera tylko porównuj bieżącą datę z "deadlinem" co jakiś interwał czasy.Jerzy Wierzchowski edytował(a) ten post dnia 15.10.10 o godzinie 14:33
Marcin W.

Marcin W.
TI/IT/VM/HT/PC/XP/AD
/SE/XL/XE/AS/TB/CP/J
S/JV

Temat: [AS3] Timer - jaki jest maksymalny delay ?

za często :-) proponuję intervala na 3600 000 (co godzinę) i dodatkowo zapis ostatniej wartości sprawdzenia daty w SO - na wypadek zaniku zasilania sprawdzamy, co jest zapisane w SO i potem decydujemy o kolejnej akcjiMarcin MaW W. edytował(a) ten post dnia 15.10.10 o godzinie 14:56
Jerzy Wierzchowski

Jerzy Wierzchowski Senior Software
Developer

Temat: [AS3] Timer - jaki jest maksymalny delay ?

jeśli dead line masz w xml po co Ci SO? Porównujesz przecież z bieżącą datą a tą odczytujesz na bieżąco.
Dominik N.

Dominik N. Człowiek od zadań
niewykonalnych.

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Nie wiem jak to rozwiązać algorytmem, ale mam pewien pomysł:

Codziennie o 0:01 sprawdzaj datę. Jeśli to już ta, to zacznij sprawdzanie co godzinę w pierwszej minucie każdej. Jak już dotarłeś do godziny to sprawdzaj co minutę.
Kasia Polus

Kasia Polus Designer. powiedzmy.

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Przemysław Słota:
A aplikacja jest uruchomiona w lokalach na TV i wyświetla informacje wg dostarczonych terminarzy ;) TV jest włączone non stop (pomijając awarie w elektrowni)

Nie wiem w jakich lokalach coś jest ustawione non stop i nie sądze aby było bezpiecznym zakładać, że nic się nie stanie :) Też właśnie znowu przygotowuję aplikacje do lokali, które są modernizowane co pół roku, bo a to ekran dotykowy, a to nowsza wersja, procesor na lepszy do wymiany itp. Dlatego do tego typu funkcji sprawdzam czas systemowy, bo tylko jemu można ufać :)
Przemysław Słota

Przemysław Słota Scrum Master/
Product Owner /
Technical Project
Manager (...

Temat: [AS3] Timer - jaki jest maksymalny delay ?

Dominik N.:
Nie wiem jak to rozwiązać algorytmem, ale mam pewien pomysł:

Codziennie o 0:01 sprawdzaj datę. Jeśli to już ta, to zacznij sprawdzanie co godzinę w pierwszej minucie każdej. Jak już dotarłeś do godziny to sprawdzaj co minutę.

Byłoby to jakieś rozwiązanie dla jednego terminarza, ale w przypadku kiedy może ich być więcej to każdy musiałby wewnętrznie wykonywać takie sprawdzanie.
Kasia Mrozek:

Nie wiem w jakich lokalach coś jest ustawione non stop i nie sądze aby było bezpiecznym zakładać, że nic się nie stanie :) Też właśnie znowu przygotowuję aplikacje do lokali, które są modernizowane co pół roku, bo a to ekran dotykowy, a to nowsza wersja, procesor na lepszy do wymiany itp. Dlatego do tego typu funkcji sprawdzam czas systemowy, bo tylko jemu można ufać :)

Nigdzie nie pisałem że zakładam że nic się nie stanie ;) Ogólnie chyba w programowaniu zawsze wychodzimy od tego że coś się stanie nawet jeśli jest to mało prawdopodobne :)

Jednak przerobiłem system wg waszych wskazówek tak że porównuję czasy każdego z nieaktywnych terminarzy z czasem systemowych i w razie konieczności uruchamiam te co trzeba. Trochę bałaganu dodaje fakt, że terminarze nie tylko mają się uruchamiać o określonej dacie i czasie ale dodatkowo okresowo co x minut, godzin, dni, tygodni, miesięcy i lat :) Ale po wstępnych testach wychodzi na to że się wszystko sprawuje należycie.

Pozdrawiam i dzięki za Wasze uwagi.

Następna dyskusja:

[AS3] czy możliwe jest uru...




Wyślij zaproszenie do