Webworkers
son esencialmente funciones que se llaman a través de onMessage
, por lo que hacer que duerman debería ser simplemente una cuestión de enviar un mensaje específico a después de un cierto período de tiempo.
A diferencia de los hilos en idiomas como Java, WebWorkers
no necesita operar en un bucle continuo (y CPU) para conservar la utilidad; se pueden enviar mensajes tantas veces como desees.
En este ejemplo, el trabajador 'duerme' mientras espera la entrada del usuario.
index.html:
<script>
var worker = new Worker("worker.js");
worker.onmessage = function(e) {
console.log("Send and recieved " + e.data);
}
function tellWorker(element) {
var data = element.value;
worker.postMessage(data);
}
</script>
worker.js:
self.onmessage = function(e) {
self.postMessage(e.data);
}
Perdóname si leído mal su pregunta.
Editar: Otra posibilidad es, suponiendo que el WebWorker
se está ejecutando en un bucle setTimeout
, escucha un mensaje que podría llamar clearTimeout
mientras un usuario está haciendo algo.
Actualización:
Este código crea un objeto, modificarlo a través del trabajador, y luego modificarlo de nuevo después de la página principal ajusta una bandera:
index.html:
<input type="button" value="start" onclick="startWork()" /><br>
<input type="button" value="passObject" onclick="finishWork()" />
<script>
var worker = new Worker("worker.js");
var incompleteObject = {
val : 0,
done : false
};
worker.onmessage = function(e) {
console.log("Exit Status: ");
console.log(e.data);
}
function startWork() {
worker.postMessage(incompleteObject);
}
function finishWork() {
incompleteObject.done = true;
worker.postMessage(incompleteObject);
}
</script>
worker.js:
self.onmessage = function(e) {
var obj = e.data;
if(obj.done == false) {
obj.val = 2;
} else {
obj.val = 4;
}
self.postMessage(obj);
}
Su respuesta tiene mucho sentido, entiendo a los trabajadores. Sin embargo, lo que quiero lograr no se puede hacer así. Básicamente, quiero que el trabajador solicite un objeto al padre en el medio de un bloque de ejecución. El trabajador debe entonces 'esperar' a que el Objeto sea devuelto antes de que pueda continuar. – Jivings
@Jivings ¿podrías dividir el proceso en dos funciones? Es posible que necesitemos ver algún código de muestra, aunque creo que sé lo que quiere lograr ahora. Actualizaré mi respuesta. –
Creo que dividir el problema en dos es hacia dónde me dirijo. – Jivings