首页 > 解决方案 > 如何确保不错过活动

问题描述

假设我有一个执行以下操作的程序:

现在,如果我的按键间隔 10 秒,这将不是问题。我如何处理非常接近的按键。更糟糕的是,按键是同时按下的。这些信息一定会丢失吗?我知道线程可能是一种选择,但这样做的一般方法是什么?即使其他代码正在运行并能够在以后处理它,是否可以只存储每个按下的键?

标签: multithreadingevents

解决方案


中断。通常,计算机为外围设备提供一种机制,通过断言中断请求信号来请求 CPU 的注意。当 CPU 准备好接受中断时,它会通过在某处保存最小状态来响应,然后执行可以查询外围设备的代码,可能从外围接收数据(按键)。

如果您使用的是操作系统,这一切都被内核隐藏,它通常会公开一些机制供您选择如何处理它:

  1. 排队按键并稍后处理它们。因此,如果我想按该顺序查询 1、3、5,我可以在您进行长时间处理时连续按下这些键并抽根烟。
  2. 放弃前瞻按键;因此要求用户与糟糕的 UI 交互。搜索“homer Simpson work from home”以了解如何解决此问题。

如果您使用的是操作系统,您可能需要查找各种 ioctl 以启用此行为,使用类似于 curses 的 UI 包或其他。

如果您不使用操作系统,那么您的工作既困难又容易:您必须编写代码来与键盘对话,但实施该策略是找出一些巴洛克式 UI 库的 1/10 工作。


推荐阅读