我正在编写一个Node.js c ++插件,该插件需要频繁地从C ++回调到Javascript。
构造函数需要两个函数,一个成功函数和一个错误回调函数。
...
// assuming info[0] and info[1] are functions with ->IsFunction()
MyClass* myClass = new MyClass();
myClass->Wrap(info.Holder());
myClass->onStateUpdateCallback = new Nan::Callback(info[0].As<v8::Function>());
myClass->onErrorCallback = new Nan::Callback(info[1].As<v8::Function>());
...
onStateUpdateCallback
和onErrorCallback
都是MyClass类的私有属性,定义如下:
...
Nan::Callback* onStateUpdateCallback;
Nan::Callback* onErrorCallback;
...
现在,当我从另一个函数调用onStateUpdateCallback
时,它第一次工作,但是第二次抛出EXC_BAD_ACCESS
失败(通过lldb
调试时)。
这就是我调用回调的方式(注意:该函数从外部库中调用,该外部库在不同的线程中执行调用,第一次是在主线程中,第二次是在线程#13中,这可能会导致问题!):
...
const int argc = 4;
// The arguments should be numbers and strings, but I simplified it to null...
v8::Local<v8::Value> argv[argc] = {
Nan::Null(),
Nan::Null(),
Nan::Null(),
Nan::Null()
};
onStateUpdateCallback->Call(argc, argv);
...
我假设函数或作用域已被Javascript垃圾回收,但是我不知道如何防止这种行为,有什么想法吗?
谢谢。
答案 0 :(得分:1)
我认为,不同的线程存在问题。
我使用Nan::AsyncProgressWorker
解决了线程问题。