• Lv0
    粉丝0

积分0 / 贡献0

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

作者动态

    OpenHarmony ui中循环处理问题

    adamsun 显示全部楼层 发表于 2024-10-25 17:03:28

    【问题描述】

    1. 在index.ets中不断的调用native c++层的接口去获取图像数据,然后将图像数据送到canvas中显示,ets中有没有类似android 的Thread线程的处理方式,起一个线程while循环不断的去调用接口捞取数据处理?
    2. 尝试使用worker线程处理,写了一个测试的worker的处理代码,在worker里面循环调用postMessage回发消息到主线程,会导致主线程阻塞,3秒超时后应用挂掉。
      async function start() : Promise<void> {
        while (true) {
          workerPort.postMessage("capture ...........");  //此处不调用postMessage回发消息则可以正常使用
        }
      }
      workerPort.onmessage = async function (data) {
        let cmd : number  = data.data;
        hilog.info(0x0000, 'testTag', 'recv cmd : %{public}d', cmd);
        if (cmd == 1)
        {
          setTimeout(() => {
            start();
          }, 1000);
        }
        else {
          hilog.info(0x0000, 'testTag', 'not capture');
          workerPort.postMessage("not capture");
        }
      }
    3. 运行结果、错误截图 image.png
    4. 在ets里面使用定时器去捞取native c++层的图像数据然后送显, 勉强可以使用,不过会出现卡顿,而且定时器的时间不能太短,太短的话没有效果(1秒可能会获取30帧数据)
    5. ui层不断的调用native c++接口读取图像数据, 然后送到canvas中显示,1秒可能30+帧数据

    【运行环境】

    硬件: ROM版本: DevEvoStudio版本:4.0 SDK版本:ohos 4.2 API 11

    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    精彩评论6

    马迪

    沙发 发表于 2024-10-26 14:35:26
    1.lottie动画是用'@ohos.animator' https://developer.huawei.com/con ... js-apis-animator-V5 定时器去刷每帧的动画,不过都是在js侧计算,没有从 native c++ 获取
    2.如果是需要从c++获取,是不是可以在c侧定时,并可以采用c api 去绘制 https://developer.huawei.com/con ... awing__canvas_8h-V5

    adamsun

    发表于 2024-10-28 13:07  IP属地: 江苏省扬州市

    回复 马迪: 通过动画的方式还没有尝试,我回头试下,谢谢

    【1 条回复】

    深开鸿_王石

    板凳 发表于 2024-10-28 08:48:39
    postMessage一般用作开始,停止这样的命令发送,work里用循环去拿data,去绘制,

    adamsun

    发表于 2024-10-28 13:06  IP属地: 江苏省扬州市

    回复 深开鸿_王石: 好的,谢谢,目前按照这种处理方式,然后再结合定时器能够实现,不过感觉实现过于复杂化了, worker里面拿到数据后先封装一下再发送到ui,ui里面拿到数据再解析下,就是感觉这个流程不大合理。可能还有更好的处理方式,后面再看看

    深开鸿_王石

    发表于 2024-10-28 14:59  IP属地: 山东省潍坊市

    回复 adamsun: 还有就是xcomponent,你可以传surfaceid到c++,然后c++侧直接绘制,不用js,c++两边跑

    adamsun

    发表于 2024-10-29 10:51  IP属地: 江苏省扬州市

    回复 深开鸿_王石: 这个方式我回头尝试下, xcomponent的方式没有试过,谢谢

    【3 条回复】
    共6 条回复,点击查看

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

    返回顶部