HarmonyOS NAPI线程切换问题?

非ArkTS线程,怎么切换到ArkTS线程。

对于如下方法,调用方仍然是NAPI,不是ArkTS,由于ArkTS主线程阻塞会终止进程,所以大量代码都是异步运行。但是执行到某些对ArkTS进行调用的函数时,会出问题,因为ArkTS代码不能再工作线程执行。

threadsafe\_function针对需要this的方法,好像不太支持。例如,下面的方法:当在工作线程调用时,就会crash,这个方法不是给ArkTS调用的。

async fn start_scan(&self, filter: ScanFilter) -> Result<()> {
  let adapter_obj: Object = self.get_adapter_obj()?;
  let mut ohos_filters: Vec<OhosScanFilter> = Vec::new();
  for uuid in filter.services {
    let ohos_filter = OhosScanFilter { serviceUuid: Some(uuid.to_string()) };
    ohos_filters.push(ohos_filter);
  }
  let start_scan: Function<Vec<OhosScanFilter>, Object> = adapter_obj.get_named_property("startScan").unwrap();
  start_scan.apply(adapter_obj, ohos_filters).unwrap();
  Ok(())
}
阅读 509
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进