我已经使用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();
是否有机会让它正常工作?或者我需要其他解决方案吗?