问题描述
我目前有以下代码可用于创建Web Worker:
I currently have this code to create a Web Worker:
w = new Worker("webwork.js");
w.onmessage = function(event) { alert(event.data); }
然后是Web Worker的webwork.js
代码:
And then the webwork.js
code for the Web Worker:
self.onmessage = function(event) {
//var ss=r; //Causes error because of undefined
var ss="";
for(var currProp in event) {
ss+=("event."+currProp+"="+event[currProp]+"\n");
}
postMessage(ss);
}
现在,我要使用以下代码传输128 MB的ArrayBuffer
:
Now I want to transfer a 128-Megabyte ArrayBuffer
with this code:
var r = new ArrayBuffer(1048576*128);
w.postMessage(0, [r]);
现在我应该已经传输了变量r
,如何从Web Worker本身访问它.我已经尝试过event.r
,只是r
,self.r
和其他类似的尝试,例如尝试为ArrayBuffers
的数组添加第二个函数参数,但是没有任何效果.
Now that I have supposedly transferred the variable r
, how do I access it from the Web Worker itself. I have tried event.r
, just r
, self.r
and other things like trying to add a second function argument for the array of ArrayBuffers
, but nothing works.
如何从Web Worker访问已传输的变量?
How can I access the transferred variable(s) from the Web Worker?
推荐答案
PostMesage(aMessage, transferList)
在transferList
中,您必须指定包含在aMessage
中的可转移对象:
In transferList
you must specify transferable objects, which contained in aMessage
:
var objData =
{
str: "string",
ab: new ArrayBuffer(100),
i8: new Int8Array(200)
};
objWorker.postMessage(objData, [objData.ab, objData.i8.buffer]);
在另一面:
self.onmessage = function(objEvent)
{
var strText = objEvent.data.str;
var objTypedArray = objEvent.data.ab;
var objTypedArrayView = objEvent.data.i8;
}
这篇关于使用Web Worker中的可传输对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!