c++ - 从在单独线程中运行的 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();
有没有机会让它工作或者我需要另一个解决方案?
解决方案
推荐阅读
- node.js - Sequelize:在表中硬删除和插入
- regex - 将字符串中的 Pascal 大小写更改为蛇大小写
- sql-server - 删除约束和表
- excel - 更改工作簿之间的文件名复制/粘贴 - 请查看我的 90% 有效的代码
- sql - 通过 Liquibase 运行创建角色 SQL 脚本
- python - 不同 shuffle 的运行精度如何分布?
- docker - 如何在 CLI(命令行界面)中将参数传递给 docker run?
- join - Codeigniter3,如何加入两个表同时显示,
- python-3.x - 如何规范化滚动熊猫数据框的子集?
- security - 使 cakephp 2 网络安全不被谷歌检测为“不太安全的应用程序”