使用Web Worker中的可传输对象 [英] Using transferable objects from a Web Worker

查看:549
本文介绍了使用Web Worker中的可传输对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前有以下代码可用于创建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,只是rself.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中的可传输对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆