• Lv0
    粉丝0

积分26 / 贡献0

提问1答案被采纳0文章0

作者动态

    Worker 线程为何会影响主线程的运行?

    msdone 显示全部楼层 发表于 2023-10-25 19:18:34
    【问题描述】
    问题现象和发生的背景
      当在 Worker 线程中使用 FileAccess 服务,Worker 关闭时,FileAccess 的服务也会关闭,导致主线程调用不了 FileAccess 的API(报 14300001 IPC 通信失败的错误)。如果在主线程重新请求 FileAccessHelper 会报 nullptr 的错误


    相关的代码,截图,日志信息
    fakename.png


    fakename.png



    我想要达到的结果
    当子线程任务(任务需要使用 FileAccess)完成,关闭子线程后,主线程依然可以使用 FileAccess

    【运行环境】
    硬件:rk3568
    ROM版本:3.2 Release
    DevEvoStudio版本:DevEco Studio 3.1.1 Release
    SDK版本:3.2.13.5
    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    精彩评论6

    深开鸿_王石

    沙发 发表于 2023-11-1 08:54:46

    主线程和worker要用底层库时要分别打开,创建实例,不能共用

    msdone

    发表于 2023-11-8 11:35  IP属地: 运营商级NAT

    回复 深开鸿_王石: worker 创建 FileAccessHelper 之后,如果不关闭 worker 线程,在主线程创建 FileAccessHelper 会报空指针,如果关闭 worker 线程,在主线程创建 FileAccessHelper 会报 cpp 错误:Signal:SIGSEGV(SEGV_MAPERR)@0x00487091cf989e85 ,

    【1 条回复】

    胖子的梦

    板凳 发表于 2023-11-6 10:42:42

    主线程和worker线程资源是不共享的,所以在worker创建使用的FileAccess服务 ,主线程是不能使用FileAccess 服务的。主线程需要自己再创建一个FileAccess服务

    msdone

    发表于 2023-11-8 11:35  IP属地: 运营商级NAT

    回复 胖子的梦: worker 创建 FileAccessHelper 之后,如果不关闭 worker 线程,在主线程创建 FileAccessHelper 会报空指针,如果关闭 worker 线程,在主线程创建 FileAccessHelper 会报 cpp 错误:Signal:SIGSEGV(SEGV_MAPERR)@0x00487091cf989e85 ,

    【1 条回复】

    msdone

    地板 发表于 2023-11-9 20:25:28

    4.0 的 Worker 可以实现了 image.png

    马迪

    发表于 2023-11-11 06:59  IP属地: 运营商级NAT

    回复 msdone: 可以共用一个了?

    【1 条回复】

    Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

    返回顶部