当我使用向上/向下箭头键在许多不同的应用程序中向上或向下滚动时,如果我按住该键,然后松开它,我经常会看到应用程序继续滚动,通常会持续相当长的时间。看起来,当按住按键时,键盘缓冲区会被按键塞满,并且在滚动停止之前都需要处理它们。这可以预防吗? IOW,当我将手指从按键上移开时,我想停止滚动。我不确定这个问题是在什么级别产生的,也就是说是这个Xfce的错,还是Debian的错还是Linux的错。然而,有些应用程序从来没有出现过这个问题,所以我不知道该怪谁。
答案1
对于类 Unix 系统(与 DOS 相比),这将在应用程序级别而不是系统上完成。系统提供了一个很大的输入缓冲区,您很难填满它。
在应用程序级别,大多数程序根本不够聪明,无法识别它们正在落后以及输入缓冲区正在被填满。他们不可以看输入缓冲区。他们可以看到更新屏幕需要多少时间,并测量他们进行更新的时间比例。
curses 应用程序可以通过在完成更新之前识别输入字符可用来进行一些优化。这预先输入函数控制curses库是否放弃更新(以进行下一个更新)。其他 Linux 终端应用程序(如果它们很聪明)可以使用丢弃它们的输入缓冲区fflush(标准输入)——这是不可移植的。
一些 X 应用程序也执行这种类型的优化(丢弃输入数据或输出更新以响应性能问题)。
但没有全系统对此的方法。与 DOS 不同,Linux(和 Unix)操作系统支持多个并发进程,并且系统尝试为这些进程提供资源。
进一步阅读:
- fpurge, __fpurge - 清除流,注意到
通常想要丢弃输入缓冲区是错误的。
- fflush - 刷新流,说
标准没有指定输入流的行为。大多数其他实现的行为与 Linux 相同。