千家信息网

怎么实现物理按键的长按事件

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要介绍"怎么实现物理按键的长按事件",在日常操作中,相信很多人在怎么实现物理按键的长按事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么实现物理按键的长按
千家信息网最后更新 2025年01月22日怎么实现物理按键的长按事件

这篇文章主要介绍"怎么实现物理按键的长按事件",在日常操作中,相信很多人在怎么实现物理按键的长按事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么实现物理按键的长按事件"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

核心实现代码如下:


有同学可能会说:这样实现有什么问题吗?看起来合情合理,用起来也没问题啊!

是的!从功能实现角度,这样做是最简单的,代码量最少,能立即可用。然而,大家也需要意识到:OnButtonPressed() 和 OnButtonReleased() 是在中断上下文中调用的!因此,这两个函数必须快速返回,不能做过于繁重的工作。但是作为框架,这两个中断函数又必须调用相应的回调函数。。。这样子的话,就要求传入的回调函数必须短小精悍,不能过于繁琐!!于是,V0.0.1版本的实现短板就凸显了:当按键按下后需要做的处理必须足够简单,如果比较复杂和繁琐,就可能造成系统中断响应不及时,进而导致系统PANIC重启!!!

那么有没有办法解决这个问题呢?

办法当然是有的!!既然V0.0.1版本的问题和中断响应相关,那么可以借鉴Linux内核中的原则和方案:中断服务程序的执行越快越好,将中断处理分为两部分:中断处理上半部和中断处理下半部。

解释:

中断发生后需要立即调用中断服务程序进行中断处理,如果直接在中断服务程序中做这个处理,那么处理速度必须越快越好!

但是,肯定有一些情况的处理步骤是比较耗时和复杂的,在这种情况下,就可以先把要做的处理工作进行标记(中断上半部),具体处理步骤在中断服务程序返回后再完成(中断下半部)。

是不是感觉很抽象,理解不了了?! 没关系,我们通过V0.0.2版本的设计实现给大家讲解这个方案。


上图中的示例就是DTButton - V0.0.2的核心实现,现在应该感觉很简单了吧。嘿嘿!因为是通用框架,所以最终的代码实现要考虑的东西很多,比上图中的示例看起来要复杂些。

现在,这个框架比起上一个版本有了很大的改进,并且还拥有了专用的事件处理线程!也正是因为创建了这个线程,所以不能浪费啊,必须多多利用才行。

那么还能用它来干点啥呢???

大家想想,现在能够捕捉到按键的按下事件和释放事件了!!

那么,如果按下事件和释放事件之间的时间间隔比较长,那么是不是我们就可以"创造"一个全新的长按事件呢???

答案是肯定的!

按下事件发生后,可以通过事件处理线程进行粗略计时,当计时超过预设的时间间隔(大概2.5秒),即可触发长按事件,具体表现为长按事件回调函数的调用。

这里需要注意:

1. 长按事件只会触发一次,即:OnButtonLongPressed() 回调函数只会调用一次

2. 释放事件触发时需要停止计时,即:按下事件和释放事件之间的时间间隔不足2.5秒就不会触发长按事件

有了上面的分析,大家就可以自己尝试动手实现了。

什么?觉得麻烦?

没事!我已经将实现代码上传到了文末的附件中,大家可以下载使用和研究,非常欢迎大家的意见和建议。

使用示例如下:

1. 定义按键事件回调函数

2. 一键注册,开箱即用

运行结果如下:

到此,关于"怎么实现物理按键的长按事件"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

事件 处理 按键 函数 问题 物理 代码 半部 版本 程序 学习 服务 复杂 时间 框架 示例 线程 繁琐 上图 两个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 乐速互联网科技有限公司 dms服务器配置要求 贵州开心玩网络技术有限公司 文件服务器备份与恢复 在科技领域如何利用好互联网 民航网络安全技能竞赛 工业图控系统软件开发服务 软件开发外包合作信息 服务器版win10蓝牙键盘驱动 大学生移动网络安全 软件开发过程可视化监管 ssh改连接数据库 销售业务erp软件开发 厦门乐昂网络技术有限公司 奥的斯服务器怎么进入消防模式 网络安全策略包含哪些内容 aix 服务器状态 统一管理 找不到flash服务器地址 厦门智能建模软件开发 海南邵嬴网络技术有限公司 数据库开发工程师好学么 习水软件开发设计 海南网络安全课程简单易学 网络安全跨省抓人 服务器编辑PDF保存提示要另存 全球网络安全高峰论坛 新时代网络安全国家标准化 手机远程连接服务器教程 上海app软件开发工资一般多少 中国经济报网络安全学院
0