最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

EXC

IT培训 admin 4浏览 0评论

EXC

我正在编写一个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>());
...

onStateUpdateCallbackonErrorCallback都是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垃圾收集,但我不知道如何防止这种行为,任何想法?

谢谢。

回答如下:

正如我所想,不同的线程存在问题。

我通过使用Nan::AsyncProgressWorker解决了线程问题。

EXC

我正在编写一个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>());
...

onStateUpdateCallbackonErrorCallback都是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垃圾收集,但我不知道如何防止这种行为,任何想法?

谢谢。

回答如下:

正如我所想,不同的线程存在问题。

我通过使用Nan::AsyncProgressWorker解决了线程问题。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论