从在单独的线程中运行的C ++插件调用Node.js函数

时间:2019-01-14 13:55:56

标签: c++ node.js

我已经使用Node的N-API为Node.js构建了一个C ++插件。我正在尝试从此插件调用JavaScript函数,如果在插件的主线程中执行了调用JS函数的C ++代码,则该函数可以正常工作。如果我尝试从另一个线程(使用std :: thread)执行它(作为lambda函数),则该函数调用将引发分段错误。

lambda函数应该从另一个线程中运行的另一个函数中调用,作为某种DataChanged通知。

这是调用JS的lambda函数:

auto callbackFunction = [this]()->void {

    napi_value clb;

    napi_status status = napi_get_reference_value(this->env, this->callback, &clb);

    napi_value global;
    status = napi_get_global(this->env, &global);

    status = napi_create_int32(this->env, 47, &arg);

    napi_value arg;
    napi_value* argv = &arg;
    size_t argc = 1;

    napi_value retVal;
    status = napi_call_function(this->env, global, clb, argc, argv, &retVal);

    int32_t actRes;
    status = napi_get_value_int32(this->env, retVal, &actRes);
    cout << "Result: " << actRes << endl;
}

这有效:

callbackFunction();

这会引发分段错误(在napi_call_function上):

thread t(callbackFunction);
t.join();

是否有机会让它正常工作?或者我需要其他解决方案吗?

0 个答案:

没有答案