主要問題:正在調用worker.postMessage
from worker.addEventListener
不好?下面的例子,我儘量保持儘可能短。在worker.addEventListener中發送另一個postMessage
我有一個工人一個GWT本地函數(之前,所以我可以重複使用它的工人被初始化。此外,大括號應該/*-{
和}-*/
但強調我只是{}
去着想語法)。
private native void nativeWorkerCalls(JavaScriptObject worker, int cwidth, int cheight) {
console.log('Main: Pre draw');
worker.postMessage({'cmd' : 'draw', 'args' : [cwidth*cheight] });
worker.addEventListener('message', function(e) {
switch (e.data.cmd) {
case 'draw':
/* do some stuff */
console.log('Main: Pre clear');
worker.postMessage({'cmd' : 'clearBuffer', 'args' : [e.data.offset]}); // I call the worker again!
break;
case 'clearBuffer':
console.log("%c Main: Post clear", 'background: #222; color: #00ffae');
break;
default:
break;
};
console.log("Main: ### Finished listener ###");
}, false);
};
及以下worker.js
腳本,應根據「加利福尼亞」通過執行不同的開關情況。
importScripts("emscripten.js");
self.addEventListener('message', function(e) {
var data = e.data;
switch (data.cmd) {
case 'draw':
/* assign some buffer, draw into it */
self.postMessage({ 'cmd' : 'draw', buffer : mb, offset : buffer});
break;
case 'clearBuffer':
/* clear buffer */
console.log('Main: Pre clear');
self.postMessage({'cmd' : 'clearBuffer'});
break;
default:
self.postMessage(null);
};
}, false);
問題:我第一次運行本機函數就沒有問題。但是接下來的每個調用都會有worker.js中的eventlistener被重複調用的副作用。
一個運行應作出以下電話:
主營:預繪製
工人:繪製
主營:後拉伸
主營:預明確
主營: ###完成聽衆###
工人:免費緩衝
主營:發佈清楚
主營:###結束監聽###
按下按鈕,第二次給了我太多的電話 - 它增加了一個抽獎(這似乎並沒有做任何事情),也增加了一個明確的(它運行到一個錯誤,因爲工人隨後將嘗試釋放一個已經被釋放的緩衝區):
主營:預繪製
工人:繪製
主營:後拉伸
主營:預明確
主營:###結束監聽###
主營:後拉伸
主要:預清除
主:###完成監聽器###
工人:免費緩衝
主營:發佈清楚
主營:###結束監聽###
主營:發佈清楚
主營:###結束監聽# ##
工人:免費緩衝
我會避免這種3路旅行。但爲什麼我有這個額外的電話是別的東西:) – Philipp