HarmonyOS 鸿蒙Next setTimeout在实现毫秒级延时的时候精度不够,如何获取精确的延时

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next setTimeout在实现毫秒级延时的时候精度不够,如何获取精确的延时

应用中需要使用setTimeout获取精确的延时以控制红外模组的帧率,但是在长时间循环运行setTimeout方法之后,会发现setTimeout延迟的误差越来越大,例如设定好40ms的延时,这样帧率是25帧,但是随着长时间的运行,setTimeout误差越来越大,导致帧率不稳定,可能会低于20帧。 想咨询一下该如何获取精确的延时。 红外模组的帧率控制,需要获取精确的延时。


更多关于HarmonyOS 鸿蒙Next setTimeout在实现毫秒级延时的时候精度不够,如何获取精确的延时的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

本地测试屏幕刷新率没有变动,恒定在60帧

onPageShow(): void {
    for (let i = 0; i < 10000; i++) {
      (() => {
        setTimeout(()=>{
          let promise: Promise<Array<display.Display>> = display.getAllDisplays();
          promise.then((data: Array<display.Display>) => {
            console.info('屏幕刷新率 ' + data[0].refreshRate);
          })
        },40)
      })()
    }
  }

可以尝试使用taskpool.executePeriodically,能否满足您的需求

文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-taskpool-V5#taskpoolexecuteperiodically12

该api需要在最新的IDE上使用,IDE下载地址:

https://developer.huawei.com/consumer/cn/download/

更多关于HarmonyOS 鸿蒙Next setTimeout在实现毫秒级延时的时候精度不够,如何获取精确的延时的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,若要实现毫秒级延时的高精度控制,可以考虑以下几种方法:

  1. 使用高精度计时器:鸿蒙系统提供了高精度计时器API,可以直接使用这些API进行更精确的延时控制。例如,利用系统时钟或硬件计时器进行微秒级甚至纳秒级的控制,这比传统的setTimeout方法要精确得多。

  2. 任务调度:利用鸿蒙系统的任务调度机制,将延时任务放到合适的优先级队列中,通过系统调度来确保任务在指定的时间点被执行,这样可以提高延时的准确性。

  3. 硬件计时器:如果应用对延时精度要求极高,可以考虑直接操作硬件计时器,但这需要较深的硬件编程知识,并且可能会涉及到底层系统资源的访问权限。

  4. 系统服务:鸿蒙系统可能提供了专门的系统服务用于高精度延时控制,可以查阅鸿蒙系统的官方文档,了解是否有此类服务,并合理利用。

综上所述,通过高精度计时器、任务调度、硬件计时器或系统服务等方式,可以在HarmonyOS鸿蒙系统中实现更精确的毫秒级延时控制。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部