非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(())
}
报错是env跨线程了,native侧异步任务用napi\_create\_async\_work。https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-asynchronous-task-V5
要数据共享(env跨线程)用线程安全函数:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-thread-safety-V5