HarmonyOS同一个线程napi_create_ark_runtime 11次之后必现崩溃
在子线程中napi_create_ark_runtime之后调用js函数(该函数中需要有console.log之类的复杂一些的方法,单纯返回值不会崩溃),调用函数之后使用napi_destroy_ark_runtime销毁,如此反复11次后必现崩溃。代码如下:
// hello.cpp, testReflectRef为在主线程中缓存的
static napi_ref testReflectRef = NULL;
void testCreate(napi_env env){
bool has_env = true;
if(env==NULL){
has_env = false;
napi_status ret = napi_create_ark_runtime(&env);
if (ret != napi_ok) {
return;
}
}
LOG_I("bbb");
napi_value testReflectFunction;
napi_get_reference_value(env, testReflectRef, &testReflectFunction);
napi_value call_result = NULL;
napi_call_function(env, NULL, testReflectFunction, 0, NULL, &call_result);
int call_result_int = 0;
napi_get_value_int32(env, call_result, &call_result_int);
LOG_I("call_result:%d", call_result_int);
LOG_I("ccc");
if(!has_env){
napi_destroy_ark_runtime(&env);
}
}
void subThread(){
napi_env env = NULL;
// napi_status ret = napi_create_ark_runtime(&env);
for(int i=0;i<100;i++){
testCreate(env);
}
}
// Utils.ets中被调用的函数
export function testReflect(){
console.log("testReflect start");
return 3;
}
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS在C++线程上调用napi_create_ark_runtime,如何调用到js层的对象
265浏览 • 1回复 待解决
HarmonyOS同一份代码,同一个版本的编译器,同一个手机,不同的电脑。代码运行崩溃
229浏览 • 2回复 待解决
Mindspore Lite和onnx runtime推理同一个模型,输入一样,输出结果不同
653浏览 • 1回复 待解决
同一个正则同一个文本 函数exec为什么经常出现异常
1595浏览 • 1回复 待解决
同一个应用中,多个线程或者多个进程访问同一个关系数据库,需要考虑并发的问题吗?
52浏览 • 1回复 待解决
HarmonyOS 依赖同一个组件,不同版本,编译后,出现引用多份同一个组件的情况
303浏览 • 1回复 待解决
OpenGL同一个上下文在多线程中使用问题
261浏览 • 1回复 待解决
HarmonyOS 多module同时依赖同一个har
476浏览 • 1回复 待解决
如何指定多个异步任务在同一个辅助线程内执行
704浏览 • 0回复 待解决
ArkTS线程模型中是否是每个线程跑一个runtime实例
1778浏览 • 1回复 待解决
如何实现在同一个UIAbility实例传递事件
279浏览 • 1回复 待解决
一个应用内的所有ArkWeb是共用同一个render进程吗?
705浏览 • 1回复 待解决
WebView与UIAbility是都运行在同一个进程?
395浏览 • 1回复 待解决
napi_create_async_work 接口创建的线程数量,最多能有多少个,是否是一个进程上限8个?
285浏览 • 1回复 待解决
HarmonyOS 截屏componentSnapshot.createFromBuilder方法总是返回同一个图片
316浏览 • 1回复 待解决
同一个Navigation下非根页面不会执行onpageshow方法
1826浏览 • 1回复 待解决
同一个HSP中,router.pushUrl中的url问题
212浏览 • 1回复 待解决
跨module 中同一个entry下LocalStorage 未同步状态
1683浏览 • 1回复 待解决
EntryAbility中的context和getContext(this)是同一个对象吗
1411浏览 • 1回复 待解决
Openharmony中同一个hap可以使用两个ExtensionAbility吗?
2651浏览 • 1回复 待解决
HarmonyOS 多模块引用同一个har包,怎么进行依赖和配置
264浏览 • 1回复 待解决
HarmonyOS 同一个手机上获取文件路径filesDir为什么会变?
271浏览 • 1回复 待解决
怎么样的两个slice算属于同一个page里面的
5705浏览 • 1回复 待解决
HarmonyOS 同一个父组件中的其中一个grid拖拽其中item 怎么避免影响其他的grid?
135浏览 • 1回复 待解决
@Observed和其他类装饰器装饰同一个class是否存在问题
2102浏览 • 1回复 待解决
testReflectRef为在主线程中缓存的,这个的作用域只能在主线程使用。在子线程中napi_create_ark_runtime之后调用js函数。在子线程中,通过napi_call_function(env, NULL, testReflectFunction, 0, NULL, &call_result);来调用,肯定会崩,变量的作用域不一样。不同线程间,设计到napi_env、napi_value等等的处理,必须在同一个线程中,不能跨线程。请参考使用Node-API接口进行线程安全开发:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-thread-safety-0000001774280466-V5
请参考使用Node-API接口进行异步任务开发:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-asynchronous-task-V5
子系统中不能使用主线程中保存的napi_ref 。调用js那边的方法,建议都抛到主线程中调用。