HarmonyOS在异步线程往主线程抛任务无法被执行
1. 实现自定义message loop机制:通过 napi_env 拿到 akui线程的loop,然后监听 timerfd 文件描述符。
2. 现象是在异步线程中抛任务到主线程,发现无法执行。
3. 如果在外边包一层 setTimeout,就发现异步任务可以抛给主线程。
Button("PostTask(再点我)")
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
//// 收到 ” post message Received success!!!! “ 这个日志代表正确
/// 如果直接这样调用, C层的日志无法成功打印 (任务无法抛到主线程)
testNapi.post();
//// 如果直接这样调用, C层的日志可以成功打印
// setTimeout(()=>{
// testNapi.post();
// }, 0);
})
预期收到如下三个日志:
05-16 18:00:20.448 36132-36132 A04001/PostTaskIssue com.xxx.posttask E Init success!!!!
05-16 18:00:22.731 36132-36132 A04001/PostTaskIssue com.xxx.posttask E Post message executed
05-16 18:00:22.733 36132-36132 A04001/PostTaskIssue com.xxx.posttask E post message Received success!!!!
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS ArkTS开发中,异步回调,怎么切到主线程执行呢
125浏览 • 1回复 待解决
子线程和主线程的优先级及任务执行策略是什么
1712浏览 • 1回复 待解决
异步是否对主线程有影响
222浏览 • 1回复 待解决
HarmonyOS线程池周期执行任务
556浏览 • 1回复 待解决
子线程和主线程之间的任务执行策略和优先级如何确定?
152浏览 • 1回复 待解决
HarmonyOS libuv实现的timer,在主线程执行没有回调,在子线程可以正常使用
154浏览 • 1回复 待解决
如何指定多个异步任务在同一个辅助线程内执行
580浏览 • 0回复 待解决
HarmonyOS 并发任务子线程之间、子线程与主线程内容不共享问题
167浏览 • 1回复 待解决
主线程怎么才能判断子线程是否已经执行结束了
6489浏览 • 1回复 待解决
在ArkTS的主线程中使用await会堵塞主线程吗
1836浏览 • 1回复 待解决
HarmonyOS主线程子线程切换问题
151浏览 • 1回复 待解决
zip包的解压是在主线程还是IO线程
1437浏览 • 1回复 待解决
延迟任务执行时机及运行线程
1794浏览 • 1回复 待解决
HarmonyOS ArkTS怎么控制子线程回到主线程
122浏览 • 1回复 待解决
HarmonyOS worker线程和主线程支持内存共享
186浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
171浏览 • 1回复 待解决
在ts中发现UI卡顿严重,需要使用异步多线程任务
1528浏览 • 1回复 待解决
HarmonyOS中UI必须在主线程渲染吗? 如何判断当前线程是否为主线程?
1631浏览 • 1回复 待解决
HarmonyOS taskPool执行的task内如何回调主线程的方法
184浏览 • 1回复 待解决
HarmonyOS async/await promise是在哪个线程,如何判断主线程还是子线程
125浏览 • 1回复 待解决
TaskPool子线程和主线程如何通信
1993浏览 • 1回复 待解决
如何判断当前线程是否是主线程
2001浏览 • 1回复 待解决
sensor无论在子线程还是主线程都报错SENSOR_PARAMETER_ERROR
83浏览 • 1回复 待解决
怎样判断当前线程是否是主线程?
193浏览 • 1回复 待解决
延迟任务回调onWorkStart和onWorkStop是运行在主线程吗
1582浏览 • 1回复 待解决
系统抛异步任务是会在ffrt线程中执行一次uv_async_send触发一次fd事件。由于双loop的弊端,现在ffrt执行完任务以后,会将主线程的回调提交给eventhandler,不再执行uv_async_send。因此不再触发fd事件,那个uv_poll_start接口就不会生效。针对这个问题,是因为timer定时器里面有触发fd的动作。