Zurück   Flashforum > Flex und AIR > Adobe AIR

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-10-2011, 12:34   #1 (permalink)
Neuer User
 
Benutzerbild von Silver_Surfer
 
Registriert seit: Sep 2009
Beiträge: 253
Question AIR App am einfrieren hindern?

Hi Leute,

hab mal eine Frage bzw Problem wie kann ich meinem AIR App sagen, dass es nicht einfriert wenn ich zB größerer Schleifen durchlaufe?
Gibts da ein Event was ich werfen kann wie zB "prevent Form Freeze".
Danke euch.
Silver_Surfer ist offline   Mit Zitat antworten
Alt 07-10-2011, 12:35   #2 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Was durchläufst Du denn? Wenn Deine App einfriert hast Du wohl irgendwo irgendwas schlicht und einfach schlecht programmiert?
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 07-10-2011, 12:37   #3 (permalink)
Neuer User
 
Benutzerbild von Silver_Surfer
 
Registriert seit: Sep 2009
Beiträge: 253
Genau daran liegt es! Nein, z.B. recursive Ordner mit 18000 Dateien durchsuchen.
Silver_Surfer ist offline   Mit Zitat antworten
Alt 07-10-2011, 12:51   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
Zitat:
Nein, z.B. recursive Ordner mit 18000 Dateien durchsuchen.
also doch schlecht programmiert

18000 Ordner zu durchsuchen, dauert nunmal seine Zeit! und wenn du Flash sagst, dass er das in einer Schleife auf einmal abarbeiten soll, wird er das auch tun, und es interessiert Flash dabei nicht, ob es währenddessen mit solchen Nebensächlichkeiten wie Benutzereingaben, oder Refresh-Zyklen des OS behelligt wird.
in anderen Sprachen wird sowas über Threading gelöst, da kann der eine Thread schonmal was länger ackern, das hält die anderen Threads aber nicht dabei auf, weiterzuarbeiten.
nur Flash kann kein threading, also musst du das anders lösen.
anderes Thema, selbes Problem: SWF friert ein bei bitmap encoding - Flashforum

Vorschlag:
erstell eine lange todo-liste
und lass Flash immer ~100 Ordner abarbeiten, dann bspw ein Timeout von 10ms.
wenn die Liste durch ist, feuert dein Code ein Event und du machst weiter, mit dem, was du vorhattest (hat ja sicher einen Grund, diese Ordner auszulesen)
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (07-10-2011 um 12:56 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 07-10-2011, 12:55   #5 (permalink)
Neuer User
 
Benutzerbild von Silver_Surfer
 
Registriert seit: Sep 2009
Beiträge: 253
Danke das werde ich testen..
Silver_Surfer ist offline   Mit Zitat antworten
Alt 07-10-2011, 13:05   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Ort: Oldenburg
Beiträge: 2.408
Ich wollte damit auch nur sagen, "beschreib das Problem genauer" und nicht "Du bist doof"

Die Idee von thomas finde ich zb. sehr interessant.
__________________
Mein Blog
Freue mich über jeden Besucher. :)
Nico B. ist offline   Mit Zitat antworten
Alt 07-10-2011, 13:28   #7 (permalink)
Neuer User
 
Benutzerbild von Silver_Surfer
 
Registriert seit: Sep 2009
Beiträge: 253
Zitat:
Zitat von Nico B. Beitrag anzeigen
Ich wollte damit auch nur sagen, "beschreib das Problem genauer" und nicht "Du bist doof"

Die Idee von thomas finde ich zb. sehr interessant.

Ja sorry..war auch eine dumme Antwort von mir.. Ick kenne das halt aus anderen Sprachen, dass man in der Schleife eine Meldung an die App schickt damit diese nicht einfriert...

Aber die Lösung von thomas ist tres bien!
Ich mach jetzt alles in einem Timer mit 10 MS und es geht wunderbar!
Silver_Surfer ist offline   Mit Zitat antworten
Alt 07-10-2011, 13:29   #8 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
mein Fazit||Erkenntnisse beim basteln der og Lösung

Threading funktioniert im Grunde genauso, da wird jedem Thread eine gewisse Laufzeit auf der CPU eingeräumt, dann wird sich um den nächsten Thread gekümmert; wenn die Liste durch ist, gehts wieder von vorne los. weiss grad nicht mehr von welcher Instanz das gesteuert wird; vermutlich irgendwo low-level OS!?

hier musst du Flash auch die Möglichkeit geben irgendwas anderes zu machen, bevor es sich wieder um deine Aufgabe kümmert, sonst friert es ein.
in dem o.g. Link hab ich das im Code mit setTimeout implementiert.
ich hatte auch versucht, es so zu bauen:
PHP-Code:
var t:Timer = new Timer(101);
t.addEventListener(TimerEvent.TIMER_COMPLETEtick);

function 
tick(e:Event=null):void
{
    
//mach was
    
t.start();

weil in der Referenz von setTimeout zugunsten von Timern abgeraten wird; aber der Code lief gefühlt langsamer, bei gleicher CPU-Last.

eine weitere Möglichkeit wäre das ganze über ENTER_FRAME aufzurufen. Wenn pro frame zu viel zu erledigen ist sinkt die FrameRate halt, aber die Anwendung friert nicht ein.

was ich noch nicht probiert habe, weil es vom Gefühl her eher nicht funktioniert wären setInterval oder ein durchlaufender Timer. Ich fürchte die halten sich so sehr an ihr timing, dass in den Pausen nicht genug Zeit bleibt, dass die Anwendung flüssig weiterläuft. (müsste ich bei Gelegenheit mal genauer testen)
setTimeout wird hier ja erst nach dem Abarbeiten der Portion ausgeführt, somit ist da tatsächlich eine Pause von 10 ms in denen etwas anderes ausgeführt wird(oder auch nicht)
bei einem interval wären die 10ms die Zeit von start zu start, einschliesslich der Zeit die benötigt wird, um diese Portion abzuarbeiten.

Zitat:
Aber die Lösung von thomas ist tres bien!
Ich mach jetzt alles in einem Timer mit 10 MS und es geht wunderbar!
ah, super. dann muss ich mir das doch mal genauener anschauen, und ggf. mal die Performance vergleichen

ergänzung:
bei allen Lösungen gilt: die Portionen / Zyklus müssen klein genug bleiben, dass sie in < 40 ms abgearbeitet werden können (entspricht 25fps), sonst wird auch hier die Anwendung nicht nur langsamer, sondern friert trotzdem ein.
wenn die Portion jedoch zu klein gehalten wird, dauert der Vorgang ewig, was auch nicht Sinn sein kann.
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (07-10-2011 um 13:55 Uhr)
thomas_E ist offline   Mit Zitat antworten
Alt 07-10-2011, 13:33   #9 (permalink)
Neuer User
 
Benutzerbild von Silver_Surfer
 
Registriert seit: Sep 2009
Beiträge: 253
Ich habs jetzt mit einem Timer gelöst, aber du meinst setTimeout ist schneller?
Silver_Surfer ist offline   Mit Zitat antworten
Alt 07-10-2011, 13:41   #10 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
wie gesagt, war "nur" gefühlt, hatte keine Benchmarks dazu gemacht.
noch was:
Zitat:
Zitat von Timer.delay
Hinweis: Ein Wert von weniger als 20 Millisekunden für delay wird nicht empfohlen. Die Timer-Frequenz ist auf 60 Bilder pro Sekunde begrenzt. Eine Verzögerung unter 16,6 Millisekunden führt zu Laufzeitproblemen.
bei setTimeout steht da nix zu.

vielleicht hatte es damit was zu tun, vielleicht damit, dass der Timer immer gestartet und beendet werden muss, oder dem Event-System dass dazwischen liegt, ka. vielleicht war es auch nur subjektive Wahrnehmung.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Preloader daran hindern, den vorausgeladenen Film zu starten. Seebold ActionScript 2 1 26-04-2009 09:08
wie kann ich flash hindern eine 0 wezulassen weberm ActionScript 1 1 21-10-2002 17:00
Animation einfrieren Tweenmaster Flash 4 und Flash 5 1 09-12-2001 07:53
Ext. Swf. einfrieren/stoppen pedroni Flash 4 und Flash 5 2 13-09-2001 00:15
MC's Einfrieren joschua Flash 4 und Flash 5 4 09-09-2001 22:58


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele