首页 > 解决方案 > 从在单独线程中运行的 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();

有没有机会让它工作或者我需要另一个解决方案?

标签: c++node.js

解决方案


推荐阅读