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
待解决
相关问题
子线程和主线程的优先级及任务执行策略是什么
1931浏览 • 1回复 待解决
HarmonyOS ArkTS开发中,异步回调,怎么切到主线程执行呢
578浏览 • 1回复 待解决
子线程和主线程之间的任务执行策略和优先级如何确定?
457浏览 • 1回复 待解决
异步是否对主线程有影响
439浏览 • 1回复 待解决
如何指定多个异步任务在同一个辅助线程内执行
786浏览 • 0回复 待解决
HarmonyOS线程池周期执行任务
1004浏览 • 1回复 待解决
HarmonyOS libuv实现的timer,在主线程执行没有回调,在子线程可以正常使用
359浏览 • 1回复 待解决
HarmonyOS 并发任务子线程之间、子线程与主线程内容不共享问题
353浏览 • 1回复 待解决
主线程怎么才能判断子线程是否已经执行结束了
6732浏览 • 1回复 待解决
在ArkTS的主线程中使用await会堵塞主线程吗
2090浏览 • 1回复 待解决
HarmonyOS主线程子线程切换问题
504浏览 • 1回复 待解决
延迟任务执行时机及运行线程
2034浏览 • 1回复 待解决
zip包的解压是在主线程还是IO线程
1595浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
372浏览 • 1回复 待解决
请问如何判断当前执行的方法运行的子线程还是主线程,以及如何打印线程ID
198浏览 • 1回复 待解决
HarmonyOS 使用MMKV在主线程中初始化后,在worker线程中无法使用,需要重新初始化
94浏览 • 1回复 待解决
HarmonyOS ArkTS怎么控制子线程回到主线程
517浏览 • 1回复 待解决
HarmonyOS worker线程和主线程支持内存共享
465浏览 • 1回复 待解决
HarmonyOS 主线程刷新UI
187浏览 • 1回复 待解决
在ts中发现UI卡顿严重,需要使用异步多线程任务
1813浏览 • 1回复 待解决
HarmonyOS中UI必须在主线程渲染吗? 如何判断当前线程是否为主线程?
1919浏览 • 1回复 待解决
HarmonyOS taskPool执行的task内如何回调主线程的方法
477浏览 • 1回复 待解决
TaskPool子线程和主线程如何通信
2275浏览 • 1回复 待解决
如何判断当前线程是否是主线程
2385浏览 • 1回复 待解决
HarmonyOS async/await promise是在哪个线程,如何判断主线程还是子线程
469浏览 • 1回复 待解决
系统抛异步任务是会在ffrt线程中执行一次uv_async_send触发一次fd事件。由于双loop的弊端,现在ffrt执行完任务以后,会将主线程的回调提交给eventhandler,不再执行uv_async_send。因此不再触发fd事件,那个uv_poll_start接口就不会生效。针对这个问题,是因为timer定时器里面有触发fd的动作。