2012-02-11 9 views

答えて

4

Webworkersは本質的にはonMessageで呼び出される関数なので、「スリープ」することは特定のメッセージを特定の時間後に送信することになります。

Javaのような言語のスレッドとは異なり、WebWorkersは、有用性を保持するために連続(およびCPU食)ループで動作する必要はありません。彼らはあなたが好きなだけ何度もメッセージを送ることができます。

この例では、ワーカーはユーザーの入力を待つ間にスリープします。

の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); 
} 

私はあなたの質問を読み違えた場合、私を許してください。

編集: 別の可能性がある、WebWorkersetTimeoutループ内で実行されているとすると、ユーザーが何かをやっている間にclearTimeoutを呼び出すことができますメッセージを聞きます。


更新:

このコードは、オブジェクトを作成し、作業者を経由して、それを修正して、親ページがフラグを調整した後、再びそれを変更します:

の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); 

} 
+0

あなたの答えは完璧な意味で、私は労働者を理解しています。しかし、私が達成したいことは、このようにすることはできません。基本的には、実行ブロックの途中で親からオブジェクトを要求するようにします。その後、作業を​​続行するには、オブジェクトが戻されるのを待機する必要があります。 – Jivings

+0

@Jivingsあなたはプロセスを2つの機能に分けることができますか?いくつかのサンプルコードを見る必要があるかもしれませんが、私はあなたが今達成したいことを知っていると思います。私は私の答えを更新します。 –

+0

私は問題を2つに分けることが私が向かっていることだと思います。 – Jivings

3

setTimeoutおよびsetIntervalは、ウェブワーカーにとって利用可能です。だから、あなたのコードを「待って」いたいなら、これが最善の解決策かもしれません。

+1

残念ながら、私は指定された間隔を待たずに、メッセージを受信するまで実行中にメソッドを一時停止させたいと思っています。 – Jivings

関連する問題