Java Reference
In-Depth Information
Beide Funktionen in dem Beispiel erfüllen keine wirklich sinnvollen Aufgaben, sind aber
wieder ausreichend zeitintensiv, dass Sie die Ausführung beobachten können (die Funktio-
nen geben auch wieder Zwischenergebnisse zurück).
Ist eine Funktion fertig, wird eine abschließende Meldung zum Aufrufer geschickt.
Bild 14.5■ Die zweite Funktion hat ihre Aufgabe erledigt.
Beachten Sie, dass mit dem Ende der jeweiligen Funktion der Worker nicht beendet wird 1 .
Jeder Klick auf einen Button sendet ein Signal an den Worker und er wird die entsprechende
Funktion aufrufen. Da diese im Worker selbst allerdings nicht in verschiedene Prozesse auf-
geteilt sind, blockiert die Ausführung einer Funktion erst einmal die Ausführung der nächs-
ten Funktion. Diese werden in eine Aufrufschlange einsortiert und sukzessive abgearbeitet.
Gezielt Worker-Aufgaben abbrechen und neue starten
Wenn Sie eine chronologische Einsortierung von verschiedenen Aufgaben eines Workers
nicht haben wollen, müssen Sie den Worker anders aufbauen. Dazu schauen wir uns eine
kleine Abwandlung kap14_3.html an, bei der sich nur die Erzeugung und die Verwaltung
des Worker ändern (kap14_3.js):
Listing 14.9■ Ein andere Art, mit dem Worker umzugehen
var th1 = null;
var i = 0;
function rek() { ... }
window.onload = function() {
document.getElementById("a").onclick = function() {
if(th1!=null) th1.terminate();
th1 = new Worker("lib/js/worker/hintergrundarbeit2.js");
th1.onmessage = function(ev) {
document.getElementById("antwort1").innerHTML = ev.data;
};
th1.postMessage(0);
};
document.getElementById("b").onclick = function() {
if(th1!=null) th1.terminate();
th1 = new Worker("lib/js/worker/hintergrundarbeit2.js");
th1.onmessage = function(ev) {
document.getElementById("antwort1").innerHTML = ev.data;
};
th1.postMessage(1);
};
rek();
};
1 Den müssten Sie wie in dem ersten Beispiel mit einem terminate() beenden (zuverlässig) oder das aufrufende
Browserfenster schließen (leider nicht immer zuverlässig).
Search WWH ::




Custom Search