16
A
回答
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);
}
原諒我,如果我誤解你的問題。
編輯: 另一種可能性是,假設WebWorker
以setTimeout
循環中運行,監聽,可以調用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);
}
3
setTimeout
和setInterval
可用於網絡工作者。所以如果你想「等待」你的代碼,這可能是最好的解決方案。
+1
謝謝,不幸的是我不想等待指定的時間間隔,我想要一個方法在執行過程中暫停,直到它收到一條消息。 – Jivings 2012-02-11 19:56:27
相關問題
- 1. 是否可以在網絡工作者中運行Angular?
- 2. ble.scan()frow網絡工作者
- 3. importScripts(網絡工作者)
- 4. 角網絡工作者不工作
- 5. 網絡工作者代表(子工作者)不工作
- 6. 離子2中的網絡工作者和網絡工作者2
- 7. 網絡工作者不起作用
- 8. 視覺工作室網絡性能測試,javascript
- 9. 如何從網絡工作者調用共享工作者?
- 10. 是否有可能通過Wifi或TMobile網絡強制網絡流量?
- 11. 網絡工作者不與onclick
- 12. fHighcharts同構渲染/網絡工作者
- 13. 終止一個網絡工作者
- 14. Android GPS網絡提供者不工作
- 15. 網絡工作者的限制
- 16. 識別網絡工作者的環境?
- 17. 睡覺
- 18. 等待的線程是否可以睡覺?
- 19. 睡覺時使用MediaRecorder導致Android手機重啓
- 20. 是否有可能從網絡配置更改IIS設置
- 21. 是否有可能將SSRS報告與網絡表單集成
- 22. 是否有可能在Corda網絡中實時註冊節點
- 23. 是否有可能用Docker複製Kubernetes容器網絡環境?
- 24. 是否有可能從IIS獲取asp.net網絡地址
- 25. 是否有可能直播網絡攝像頭?
- 26. 是否有可能使git svn dcommit導致單個svn提交?
- 27. 壓縮swf文件是否有可能導致文件變大?
- 28. 是否有可能得到導致錯誤的行號?
- 29. 是否有可能導致UI-Grid的afterCellEdit人爲觸發?
- 30. 我怎樣才能在網絡工作者
你的答案非常合理,我理解工人。然而,我想要達到的目標不能這樣做。基本上我希望工作人員在執行塊的中間向父節點請求一個對象。然後,工作人員需要「等待」對象才能繼續傳回。 – Jivings 2012-02-11 19:42:45
@Jivings你能把這個過程分解成兩個功能嗎?我們可能需要看一些示例代碼,但我想我知道你現在想要實現什麼。我會更新我的答案。 – 2012-02-11 19:51:49
我認爲把這個問題分解成兩個問題就是我正在走向的。 – Jivings 2012-02-11 19:52:22