ChromeWorker设置指向内存的指针或发送大数据。怎么样?

时间:2014-05-28 12:24:48

标签: javascript firefox firefox-addon firefox-addon-sdk

我们尝试通过ChromeWoker发送500kb并在控制台中出现内存错误。

此代码:

let charArray= ctypes.ArrayType(ctypes.char);
let base641 = new charArray(9999999);

var {ChromeWorker} = Cu.import("resource://gre/modules/Services.jsm", null);
var chworker = new ChromeWorker(self.data.url("async.js"));

chworker.onmessage = function(e){
  console.error(e.data);
};

chworker.postMessage(base641);

返回错误:

stack:"@undefined:undefined:undefined
CuddlefishLoader/options<.load@resource://gre/modules/commonjs/sdk/loader/cuddlefish.js:129:9
run@resource://gre/modules/commonjs/sdk/addon/runner.js:169:9
startup/<@resource://gre/modules/commonjs/sdk/addon/runner.js:113:7
Handler.prototype.process@resource://gre/modules/Promise-backend.js:863:11
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise-backend.js:742:7"

什么是未定义的?我们可以通过ChromeWorker设置指向内存的指针吗?

1 个答案:

答案 0 :(得分:2)

要传递ctypes数组,您需要使用address()并在消息中发布该数组,并从另一侧的该地址构造另一个指针。这有效,但当然是相当讨厌的。您还需要确保垃圾收集不收集内容,而另一方仍然使用它!

您最好使用ArrayBuffer /类型的数组,pass directly,也可以使用非特权代码。