Rechenleistung freigeben / Sleep
Flavio
- javascript
0 Niggel0 Flavio0 Hans-Peter Rieger0 Flavio
0 Niggel0 Antje Hofmann0 Lutz T.
Hallo!!!
Hoffe dass mir jemand helfen kann...
Ich brauche eine funktion die mir das System entlastet, da ich mit einer While Schleife andauernd einen Wert abfragen muss.
Wenn ich aber meine Schleife einfach so schreibe:
while(Wert != "OK"){
}
Wird die CPU zu 100% belastet (was auch logisch ist...) und die Funktion die den Wert abändern muss komm nicht mehr dazu etwas zu tun!!
In Visual Basic wäre das Problem mi einem "DoEvent" zu lösen, habe aber nichts änliches gefunden.
Bitte helft mir!!Bin am verzweifeln!!!
Flavio
Hallo Flavio,
mit 'ID = setInterval("funktion()", 10);' kannst Du in bestimmten Zeitintervallen die Funktion "funktion()" ausführen. Dann wird der Prozessor nur alle zehn Millisekunden belastet und nicht die ganze Zeit.
Hoffe, das hilft Dir.
Gruß
Niggel
Hallo Flavio,
mit 'ID = setInterval("funktion()", 10);' kannst Du in bestimmten Zeitintervallen die Funktion "funktion()" ausführen. Dann wird der Prozessor nur alle zehn Millisekunden belastet und nicht die ganze Zeit.
Hoffe, das hilft Dir.
Gruß
Niggel
Nun sieht meine Schleife so aus:
while(Wert!="OK"){
ID = setInterval("Warte()", 1);
}
Wobei die Funktion Warte() nichts unternimmt:
function Warte(){
}
Leider steigt die Prozessorleistung immer noch auf 100% und alles bleibt stehen.
Alternativen?
Flavio
Hallo, Flavio
Leider steigt die Prozessorleistung immer noch auf 100% und alles bleibt stehen.
es hängt davon ab, _wie_ setInterval() implentiert ist. Nachdem JavaScript nicht unbedingt _die_ Methode der Wahl ist, wenn man ein multitasking-fähiges Echtzeitsystem aufbauen will, kann es durchaus sein, dass setIntervall() selbst nur eine auf die CPU-Leistung normierte for-loop darstellt. Und die nützt Dir nix.
Vielleicht, wenn Du uns verraten würdest _worauf_ Du eigentlich wartest, könnte man eine Variation finden, die das mit einem normalen Event-Handler erschlagen kann (platsch !).
Gruß
Hans-Peter
Hallo Hans-Peter
es hängt davon ab, _wie_ setInterval() implentiert ist. Nachdem JavaScript nicht unbedingt _die_ Methode der Wahl ist, wenn man ein multitasking-fähiges Echtzeitsystem aufbauen will, kann es durchaus sein, dass setIntervall() selbst nur eine auf die CPU-Leistung normierte for-loop darstellt. Und die nützt Dir nix.
Was meinst du damit? Soll es heissen das meine CPU anstatt zu warten einfach eine Schleife erstellt wie ich sie gemacht habe? Was muss ich tun um dies zu kontrollieren?
Vielleicht, wenn Du uns verraten würdest _worauf_ Du eigentlich wartest, könnte man eine Variation finden, die das mit einem normalen Event-Handler erschlagen kann (platsch !).
Aus dem EventHandler wird eine php seite gestartet die auf eine Datenbank zugreift (muss so sein da ich Datenbankzugriffe nur aus php durchführen darf...)und danach wird wieder mit Javascript ein Feldinhalt abgeändert.
Dieses Feld wird aus dem EventHandler aus auf ein change überwacht oder mit setInterval jede X Sekunden überprüft (hab beides ausprobiert).
Beim ersten Fall wird der Change event zu früh bearbeitet (weiss auch nicht warum...). Im zweiten Fall Geht die CPU auf 100% und nichts geht mehr...
Ich hoffe dass es Verständlich ist...
Grüsse
Flavio
Die Schleife musst Du weglassen:
ID = setInterval("Warte()", 10);
function Warte(){
if (Wert != "OK") {
ID = setInterval("Warte()", 10);
}
}
so müsste es gehen.
Hallo Niggel
ID = setInterval("Warte()", 10);
function Warte(){
if (Wert != "OK") {
ID = setInterval("Warte()", 10);
}
}
so müsste es gehen.
nein auch nicht. setInterval rufst ja die Funktion alle 10 ms auf. So wie du sie aufbaust, wird mit jedem Aufruf erneut ein setInterval initialisiert.
2 Möglichkeiten gibt es:
ID = window.setTimeout("Warte()", 10);
function Warte(){
if (Wert != "OK") {
//Wert stimmt nicht, neuer Wartezyklus wird eingeleitet
ID = window.setTimeout("Warte()", 10);
}
}
oder
ID = window.setInterval("Warte()", 10);
function Warte(){
if (Wert == "OK") {
//Wert stimmt, Intervallschleife wird beendet
ID = window.clearInterval("Warte()", 10);
}
}
Mehr dazu:
http://selfhtml.teamone.de/javascript/objekte/window.htm#clear_interval
http://selfhtml.teamone.de/javascript/objekte/window.htm#set_interval
http://selfhtml.teamone.de/javascript/objekte/window.htm#set_timeout
Viele Grüße
Antje
Hallo Niggel
ID = setInterval("Warte()", 10);
function Warte(){
if (Wert != "OK") {
ID = setInterval("Warte()", 10);
}
}
so müsste es gehen.
nein auch nicht. setInterval rufst ja die Funktion alle 10 ms auf. So wie du sie aufbaust, wird mit jedem Aufruf erneut ein setInterval initialisiert.
2 Möglichkeiten gibt es:
ID = window.setTimeout("Warte()", 10);
function Warte(){
if (Wert != "OK") {
//Wert stimmt nicht, neuer Wartezyklus wird eingeleitet
ID = window.setTimeout("Warte()", 10);
}
}
oder
ID = window.setInterval("Warte()", 10);
function Warte(){
if (Wert == "OK") {
//Wert stimmt, Intervallschleife wird beendet
ID = window.clearInterval("Warte()", 10);
}
}
Mehr dazu:
http://selfhtml.teamone.de/javascript/objekte/window.htm#clear_interval
http://selfhtml.teamone.de/javascript/objekte/window.htm#set_interval
http://selfhtml.teamone.de/javascript/objekte/window.htm#set_timeout
Viele Grüße
Antje
Hallo Antje,
da ist ein kleiner Fehler in Deiner Fehlerkorrektur:
anstelle ID = window.clearInterval("Warte()", 10);
muss window.clearInterval(ID); verwendet werden.
Siehe z.B. mein JavaScript-Spiel unter
http://www.tu-chemnitz.de/~luta/play/threefit.html
Viele Grüße, Lutz :-)