HarmonyOS ETS和c++层通信

将cocos2d-x移植到HarmonyOS上之后运行的过程中经常发生高概率崩溃的问题,崩溃栈如下,看起来是崩溃在WorkerThreads上的,请问通过WorkerThreads线程来运行cocos2d-x是否有隐患?

Process life time:8s
Reason:Signal:SIGSEGV(SEGV_MAPERR)@0x0000005c69c21544
Fault thread info:
  Tid:62406, Name:WorkerThread
#00 pc 0000005c69c21544 Not mapped
#01 pc 0000000000000076 Not mapped
#02 pc 00000000019bec0c /data/storage/el1/bundle/libs/arm64/libnativerender.so(lua_pcall+144)(9e896cf2715478e661994ec045a9309af5781f29)
#03 pc 0000000000fb0160 /data/storage/el1/bundle/libs/arm64/libnativerender.so(cocos2d::LuaStack::executeFunctionByHandler(int, int)+128)(9e896cf2715478e661994ec045a9309af5781f29)
#04 pc 0000000000fa7cf4 /data/storage/el1/bundle/libs/arm64/libnativerender.so(cocos2d::LuaEngine::handleScheduler(void*)+124)(9e896cf2715478e661994ec045a9309af5781f29)
#05 pc 0000000000fa772c /data/storage/el1/bundle/libs/arm64/libnativerender.so(cocos2d::LuaEngine::sendEvent(cocos2d::ScriptEvent*)+200)(9e896cf2715478e661994ec045a9309af5781f29)
#06 pc 0000000000ea26a0 /data/storage/el1/bundle/libs/arm64/libnativerender.so(cocos2d::TimerScriptHandler::trigger()+132)(9e896cf2715478e661994ec045a9309af5781f29)
#07 pc 0000000000ea0dd0 /data/storage/el1/bundle/libs/arm64/libnativerender.so(cocos2d::Timer::update(float)+344)(9e896cf2715478e661994ec045a9309af5781f29)
#08 pc 0000000000eadc68 /data/storage/el1/bundle/libs/arm64/libnativerender.so(cocos2d::Scheduler::update(float)+1408)(9e896cf2715478e661994ec045a9309af5781f29)
#09 pc 0000000000d0c104 /data/storage/el1/bundle/libs/arm64/libnativerender.so(cocos2d::Director::drawScene()+136)(9e896cf2715478e661994ec045a9309af5781f29)
#10 pc 0000000000d10034 /data/storage/el1/bundle/libs/arm64/libnativerender.so(cocos2d::DisplayLinkDirector::mainLoop()+72)(9e896cf2715478e661994ec045a9309af5781f29)
#11 pc 0000000000c09778 /data/storage/el1/bundle/libs/arm64/libnativerender.so(PluginRender::timerCb(uv_timer_s*)+64)(9e896cf2715478e661994ec045a9309af5781f29)
#12 pc 00000000000143c0 /system/lib64/platformsdk/libuv.so(uv__run_timers+48)(9cdd4d98858371ef8396cefa185af742)
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

1)关于cocos2d-x在WorkerThreads线程上运行是否有隐患,需要检查下是否试图在WorkerThreads线程上直接操作UI控件。

2)注意到崩溃日志中多次出现了:

AddCleanupHook Failed. 

是否使用了napi_add_env_cleanup_hook函数?

NODE_EXTERN napi_status napi_add_env_cleanup_hook(node_api_nogc_env env,napi_cleanup_hook fun,void* arg);

解决方案

一旦当前Node.js环境退出,将fun注册为要使用arg参数运行的函数。可以使用不同的arg值安全地多次指定一个函数。

在这种情况下,它也会被多次调用。不允许多次提供相同的fun和arg值,否则会导致进程中止。

该函数的使用方法参考:https://nodejs.cn/api/n-api.html#napi_add_env_cleanup_hook

分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS ArkTsC++实时通信
192浏览 • 1回复 待解决
HarmonyOS C++ 调用 ets 函数报错闪退
46浏览 • 1回复 待解决
ArkTS通过接口访问C++对象
389浏览 • 1回复 待解决
ts给c++传递数组,c++如何解析
1941浏览 • 1回复 待解决
HarmonyOSC++触发通知到ArkTS
113浏览 • 1回复 待解决
c/c++主动调用ArkTS存在问题
436浏览 • 1回复 待解决
需要提供c++到js通信demo
625浏览 • 1回复 待解决
通过Native 调用c++实现文本绘制
1095浏览 • 1回复 待解决
HarmonyOS C++自定义组件如何开发?
349浏览 • 1回复 待解决
HarmonyOS C++ArkTS交互
28浏览 • 1回复 待解决
HarmonyOS C++如何同步调用JS函数 -
62浏览 • 0回复 待解决