JavaScript Funktionen parallel
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
browser
code
eigentliche problem
endlosschleife
erfahrung
funktion
funktionieren
gleichzeitig ablaufen
golem
http
liste
parallel ablaufen
praxis
richtung
schleife
signal
steuerelement
tag
url
weile
-
Guten Tag Limas,
Ich habe ein JavaScript, bei dem zwei Funktionen gleichzeitig ablaufen sollen, die eine Funktion soll die andere, die eine While-Schleife benutzt, dann unterbrechen:
<script type="text/javascript" language="javascript"> var bool = true; function func_one() { bool = false; } function func_two() { var i = 1; while ( bool ) i++; } </script> <button onclick="func_two()">Func_two auslösen</button> <button onclick="func_one()">Click</button>
Die While-Schleife in func_two läuft so lange durch, bis die Variable bool durch func_one auf false gesetzt wird. Prinzipiell sollte das ja so funktionieren, in der Praxis durchläuft die Liste aber eine Endlosschleife, der Browser bleibt nach einer Zeit hängen. Das erkläre ich mir damit, dass die Funktionen in JavaScript nicht parallel ablaufen können.
Gibt es hierzu eine Lösung? Vielen Dank für alle Antworten!
mermadalis -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich würde das so lösen:
<script type="text/javascript" language="javascript"> var bool = true; function func_one() { bool = false; } function func_two() { var i = 1; while ( bool==true ) i++; } </script>
also die while schleife solange läuft wie bool==true ist
:P
kann auch sein ich ich mich das irre (habe nicht zuviel js Erfahrung
aber viel java erfahrung -
Das, was du geschrieben hast, ist im Prinzip genau das gleiche Script, wie das von mir gepostete:
"while ( bool )" entspricht "while ( bool == true )"
Das eigentliche Problem besteht darin, dass die While-Schleife einfach alle Steuerelemente blockiert und daher auch nicht unterbrochen werden kann.
Beitrag zuletzt geändert: 23.12.2011 13:48:15 von mermadalis -
So geht das auch nicht, tut mir leid.
Javascript ist eine SingleThread-Sprache, du kannst also eigentlich nicht paralelisieren. Intel hat allerdings eine API vorgestellt, welche vllt in Zukunft Std werden könnte, nennt sich River Tail (http://www.golem.de/1109/86524.html). Diese geht aber nur bei FireFox Nutzern mit entsprechendem Plugin.
Man kann allerdings eine Pseudoparalelität erreichen, indem man mittels Eventhändlern, setInterval und setTimeout geschickt ein scheinbar-threading erzeugt. Dein Beispiel wäre also so durchsetzbar:
<script type="text/javascript" language="javascript"> function MyClass() { var bool = false; var i = 1; this.run = function() { if (bool) { i++; setTimeout(this.run(), 100); } } this.start = function() { bool = true; run(); } this.stop = function() { bool = false; alert(i); } } var MeinHandler = new MyClass(); MeinHandler.start(); //do some Code MeinHandler.stop(); </script>
So sollte man eigentlich eine funktionierende Threadklasse gebaut haben in Javascript. Der Thread kriegt alle 100ms ein Signal sich auszuführen. Da ich das schon ne Weile nichtmehr gemacht habe garantiere ich nicht, dass der Code geht, aber so in die Richtung wird es funktionieren.
Liebe Grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage