Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-01-2008, 13:16   #1 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
Flash vs. C++

Was ich eigentlich schon immer mal wissen wollte,
warum in flash die while-schleife eigentlich nicht
der in c++ ähnelt, sprich dass
Code:
  1. int main()
  2. {
  3.     while( bedingung )
  4.     {
  5.         // ...
  6.     }
  7. }
hierbei das programm ein "enterFrame" besitzt und nicht abstürzt,
in flash bringt die while schleife ja n schönen abbruch ^^

liegt es vllt daran das flash nach frames arbeitet und dann die while schleife nicht, wie ich vermute in c++ nach CPU geschw. ausgeführt wird ?
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi
_crypto_ ist offline   Mit Zitat antworten
Alt 24-01-2008, 13:25   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Also, wenn ich nun nicht ganz daneben liege würde ich mal vermuten, dass Flash versucht Anweisungen in einem Frame abzuarbeiten. Bei Endlosschleifen geht in Flash halt definitiv nach hinten los, denn die können nicht in einem Frame abgehandelt werden.

So hab ich mir das damals, wie du, zusammengereimt.
Omega Psi ist offline   Mit Zitat antworten
Alt 24-01-2008, 13:37   #3 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.587
Richtig.
Flash führt vor der Aktualisierung des frames jeglichen code aus und refresht erst danach.
Dauert die Abarbeitung länger als das limit kommt die tolle Meldung des Players.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 24-01-2008, 13:58   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 18.018
Zitat:
Zitat von _crypto_ Beitrag anzeigen
liegt es vllt daran das flash nach frames arbeitet und dann die while schleife nicht, wie ich vermute in c++ nach CPU geschw. ausgeführt wird ?
es liegt daran, weil flash in erster linie ein animationsprogramm ist und die programmierung nur schmückendes beiwerk. während c++ ist "nur" programmierung. da ist der programmierer für alles selbst verantwortlich.

die bearbeitungsgeschwindigkeit hat mit der framerate nichts zu tun. solange ein AS abgearbeitet wird, so lange bewegt sich in der restlichen animation nichts (flash ist nicht multitask-fähig).
und genau dieses warten müssen ist der grund der reklamation seitens flash. flash möchte gerne auch mal, eben um die vorgegebene framerate einhalten zu können. nach dem motto: "the show must go on". da hat sich der programmierer unter zu ordnen ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (24-01-2008 um 14:00 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 24-01-2008, 14:02   #5 (permalink)
mushroom powered
 
Benutzerbild von b.asile
 
Registriert seit: Jun 2005
Ort: Amsterdam
Beiträge: 2.647
Zitat:
Flash Player will never interrupt the execution of a block of code in order to update the screen.
__________________
[ WHEN THE GOING GETS WEIRD THE WEIRD TURN PRO ]

devboy.org
b.asile ist offline   Mit Zitat antworten
Alt 24-01-2008, 14:40   #6 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.935
Zitat:
Zitat von hgseib Beitrag anzeigen
es liegt daran, weil flash in erster linie ein animationsprogramm ist und die programmierung nur schmückendes beiwerk.
Willkommen im 21. Jahrhundert

Deine Grundaussage stimmt zwar, aber wir würden wohl unser Geld nicht damit verdienen, wenn es nur Beiwerk wäre.
sebastian ist offline   Mit Zitat antworten
Alt 24-01-2008, 14:57   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 18.018
Zitat:
Zitat von Sebastian W. Beitrag anzeigen
Willkommen im 21. Jahrhundert

Deine Grundaussage stimmt zwar, aber wir würden wohl unser Geld nicht damit verdienen, wenn es nur Beiwerk wäre.
jeder darf wie er will und kann.

was hat die höhere priorität, wer steuert das ganze? flash selbst oder AS?
wie wir alle wissen, hier "bevormundet" flash das AS und nicht umgekehrt. also wer ist der boss im ring?

z.b. ein brower-plugin mag noch so fett und umfangreich sein, es bleibt dem browser untergeordnet. das hat überhaupt nichts damit zu tun, welcher aufwand benötigt wird, um dieses plugin zu erstellen. das mag 1000mal mehr kosten und wert sein. ein plugin bleibt ein plugin und AS ist nur ein teil von flash.
demgegenüber bildet c++ das ganze programm; als antwortversuch auf die ursprüngliche frage "worin der unterschied liegt".
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (24-01-2008 um 15:03 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 24-01-2008, 17:44   #8 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg
Beiträge: 4.385
In normalen Programmiersprachen wie C++ oder Java schreibt man was graphische Sachen angeht direkt in den Grafikspeicher, wenn man also in einer while-Schleife ein paar Pixel umfärbt, ließt die Grafikkarte das (asynchron) aus dem Grafikspeicher aus, und zeigt es auf dem Bildschirm an.
In Flash ist zwischen dem Programmierer und dem Grafikspeicher noch eine Stufe dazwischen, die das was der Programmierer (als Vektor) zeichnet erstmal auf Pixel rastert, und dann als Bitmap in den Grafikspeicher schreibt.
Diese Zwischenstufe wird periodisch, will heißen einmal pro Frame aufgerufen, und kommt eben immer erst zum Zuge, wenn alle anstehenden AS Anweisungen abgearbeitet sind.
Das Vorgehen von Flash hat den Vorteil, das man immer nur "ganze" Bilder sieht, weil der Bildschirm immer auf einmal aktualisiert wird.
In Java muss man eigentlich immer, wenn man etwas bewegtes zeichnen möchte, selber diese Zwischenstufe einbauen, indem man einen eigenen Puffer baut, in den erstmal reingemalt wird, und der dann als ganzen auf den Grafikspeicher kopiert wird.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 25-01-2008, 09:23   #9 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Moment, Moment! Also eine Endlosschleife ist immer eine Endlosschleife. Das sei dir gesagt. Stell dir etwas vor wie

Code:
while (true)
{
  while (true)
  {
    // zeichne etwas schönes
    setPixels(...);
  }

  updateScreen();
}
Die äußere Schleife würde ständig den Screen updaten, aber wenn die innere endlos läuft, würdest du dadurch auch nichts sehen!

Das Problem bleibt also _genauso_ bestehen.


Jetzt aber zu den Unterschieden: Mit C/C++/Java/usw. hast du die Möglichkeit Threads zu verwenden. Threads erlauben es "parallel" zu arbeiten. Bei 2 CPUs funktioniert das sogar mehr oder weniger, weil Threads pro CPU verteilt werden können und so die Last verteilt wird.

Zu dem Beispiel mit der while:

Code:
THREAD1
{
  while(true)
  {
    updateScreen()
  }
}

THREAD2
{
  while(true)
  {
    setPixels()
  }
}
Jetzt können beide endlos laufen, ohne dass der eine den anderen Anhält. Aber ich denke das würde ganz schön komisch aussehen, mit Threads kriegt man halt auch so manch andere neue Verhaltensweisen -- in einer Schleife könnte auf einmal etwas null werden, was vorher nicht war, wenn z.B. der "Array" nicht Threadsafe ist.

Etwas anderes was du oft siehst ist ein Thread für einen Server, einer für die Clients (eine ganz schlechte Praxis eigentlich) und das sieht dann so aus

Code:
while(true)
{
  client = server.accept();

  doSomething(client);
}
Hier hält server.accept() den Code an der Stelle vollständig an. Wenn ein client ankommt geht es weiter. Einfach mal Googeln
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele