#鸿蒙通关秘籍#如何在HarmonyOS的Native进程中避免阻塞主线程?

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
WebWitch

优化HarmonyOS应用的性能,可以通过在Native进程中使用子线程来避免阻塞主线程:

  1. 在Native侧,使用标准库的std::thread来创建一个子线程执行繁重任务:

    std::thread downloadThread(downloadTask, asyncContext);
    downloadThread.detach();
    

    使用detach()方法使线程与主线程分离,这样即使主线程继续运行,也不会阻塞子线程。

  2. 在该子线程中定期执行异步任务,而不是长时间占用主线程:

    while (context && context->progress < 100) {
         context->progress += 1;
         napi_acquire_threadsafe_function(tsfn);
         napi_call_threadsafe_function(tsfn, (void *)context, napi_tsfn_blocking);
         std::this_thread::sleep_for(std::chrono::milliseconds(100));
     }
    

    在每一次进度更新后进行100ms的休眠,避免过于频繁地更新导致资源争用。

  3. 使用napi_threadsafe_function确保跨线程调用JS函数的安全性,以避免多线程竞态条件。

分享
微博
QQ
微信
回复
7天前
相关问题
在C++回调时,如何阻塞TS主线程
472浏览 • 1回复 待解决
Worker宿主线程必须是主线程吗?
407浏览 • 1回复 待解决