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
待解决
相关问题
子线程和主线程的优先级及任务执行策略是什么
1872浏览 • 1回复 待解决
HarmonyOS ArkTS开发中,异步回调,怎么切到主线程执行呢
471浏览 • 1回复 待解决
异步是否对主线程有影响
402浏览 • 1回复 待解决
子线程和主线程之间的任务执行策略和优先级如何确定?
381浏览 • 1回复 待解决
HarmonyOS线程池周期执行任务
917浏览 • 1回复 待解决
如何指定多个异步任务在同一个辅助线程内执行
733浏览 • 0回复 待解决
HarmonyOS libuv实现的timer,在主线程执行没有回调,在子线程可以正常使用
319浏览 • 1回复 待解决
HarmonyOS 并发任务子线程之间、子线程与主线程内容不共享问题
303浏览 • 1回复 待解决
主线程怎么才能判断子线程是否已经执行结束了
6655浏览 • 1回复 待解决
在ArkTS的主线程中使用await会堵塞主线程吗
2041浏览 • 1回复 待解决
HarmonyOS主线程子线程切换问题
420浏览 • 1回复 待解决
zip包的解压是在主线程还是IO线程
1542浏览 • 1回复 待解决
延迟任务执行时机及运行线程
1976浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
313浏览 • 1回复 待解决
HarmonyOS ArkTS怎么控制子线程回到主线程
443浏览 • 1回复 待解决
HarmonyOS worker线程和主线程支持内存共享
396浏览 • 1回复 待解决
HarmonyOS 主线程刷新UI
112浏览 • 1回复 待解决
请问如何判断当前执行的方法运行的子线程还是主线程,以及如何打印线程ID
140浏览 • 1回复 待解决
HarmonyOS中UI必须在主线程渲染吗? 如何判断当前线程是否为主线程?
1848浏览 • 1回复 待解决
TaskPool子线程和主线程如何通信
2223浏览 • 1回复 待解决
在ts中发现UI卡顿严重,需要使用异步多线程任务
1753浏览 • 1回复 待解决
如何判断当前线程是否是主线程
2282浏览 • 1回复 待解决
sensor无论在子线程还是主线程都报错SENSOR_PARAMETER_ERROR
241浏览 • 1回复 待解决
HarmonyOS async/await promise是在哪个线程,如何判断主线程还是子线程
377浏览 • 1回复 待解决
怎样判断当前线程是否是主线程?
366浏览 • 1回复 待解决
系统抛异步任务是会在ffrt线程中执行一次uv_async_send触发一次fd事件。由于双loop的弊端,现在ffrt执行完任务以后,会将主线程的回调提交给eventhandler,不再执行uv_async_send。因此不再触发fd事件,那个uv_poll_start接口就不会生效。针对这个问题,是因为timer定时器里面有触发fd的动作。