打印
[活动]

【技术分享】linux下按键的通知顺序错乱调查

[复制链接]
6629|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
76290391|  楼主 | 2023-10-23 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
@21小跑堂  #申请原创

1、技术问题
    最近工作遇到过需求,板子外接到按键,通过内核的input子系统将按键事件上报到应用程序。
    大概监控了十几个按键,通过多路复用监控了所有的按键,使用正常。
    但是,如果快速按下放开,通过日志能够看到应用层得到事件的顺序是对的,事件很靠近。但是应用层处理的顺序是错乱的。先处理了释放事件,再处理按下事件。就导致绘制屏幕乱七八糟的。


2、解决方案


  问题原因:是因为事件太近,系统调度是不确定的,不是严格按照我事件得到的顺序调度的,就造成了这个问题。
解决方法:修改线程的调度策略和调度优先级。
   首先配置线程的调度策略为FIFO,调度优先级为2即可,不用太高。
   最重要的是要解除继承父线程的线程属性。
   linux的新线程默认是继承父线程的线程属性,如不解除父子线程属性的继承,则会导致配置线程调度策略和优先级会失败。
   后续改完,证明效果良好。


   不用担心优先级调高影响其他程序的性能,因为事件读取很快,丢给其他任务继续任务。读取按键事件的任务线程会继续读取,若无事件,就会睡眠,不会占用cpu时间片,不影响系统性能。

使用特权

评论回复

相关帖子

沙发
Prry| | 2023-10-25 23:29 | 只看该作者
赞,感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

74

帖子

1

粉丝