#鸿蒙通关秘籍#在鸿蒙体系中通过线程安全函数的线程管理实现无阻滞界面体验

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
CD晨光熹

在鸿蒙环境中,如果主线程执行耗时操作会导致界面阻塞,通过利用 napi_threadsafe_function 功能,可以将这些重负载操作移动到子线程中处理。

c++ napi_threadsafe_function safe_function; int g_Value;

void CallJavaScriptFunction(napi_env env, napi_value js_cb, void *context, void *data) { napi_valuetype valuetype; napi_typeof(env, js_cb, &valuetype); if (valuetype == napi_valuetype::napi_function) { napi_value result, arg; napi_create_int32(env, g_Value, &arg); napi_call_function(env, nullptr, js_cb, 1, &arg, &result); } }

napi_value InitializeSafeFunctionCall(napi_env env, napi_callback_info info) { napi_value js_callback; napi_get_cb_info(env, info, &js_callback, nullptr, nullptr);

napi_create_threadsafe_function(env, js_callback, nullptr, nullptr, 0, 1, nullptr, nullptr, nullptr, CallJavaScriptFunction, &safe_function);

for (int i = 0; i < 3; ++i) {
    std::thread([i] {
        napi_acquire_threadsafe_function(safe_function);
        napi_call_threadsafe_function(safe_function, nullptr, napi_tsfn_nonblocking);
    }).join();
}

napi_release_threadsafe_function(safe_function, napi_tsfn_release);
return nullptr;

}

这样可以在处理繁重任务时,确保用户界面保持流畅与响应。


分享
微博
QQ
微信
回复
1天前
相关问题
Native rdb写入是否有线程安全管理
1861浏览 • 1回复 待解决
ArkTs多线程方案如何保证线程安全
2559浏览 • 2回复 待解决
NAPI跨线程调用TS线程函数
1185浏览 • 1回复 待解决