Keyboard 键盘缓冲字与程序有什么不同?

Keyboard 键盘缓冲字与程序有什么不同?,keyboard,buffer,Keyboard,Buffer,当我试图找到一些关于键盘缓冲区的东西时,答案总是键盘缓冲区是在按键被处理之前存储它们,但是有一些东西困扰着我,因为我不明白,当一个程序涉及到按键应该被处理的时候,例如,如果有一个命令行或其他东西保存文本,并且要处理它,您需要按enter键, 键盘缓冲区如何在“输入”特定程序之前保存文本,并且不与存储在键盘缓冲区中的另一个程序中断?。 还是我不完全明白 物理键盘本身有一个缓冲区,但这不是使用的唯一缓冲区。计算机硬件、操作系统和程序(或框架)本身都可以根据自己的规则缓冲输入。具体细节因硬件和操作系统

当我试图找到一些关于键盘缓冲区的东西时,答案总是键盘缓冲区是在按键被处理之前存储它们,但是有一些东西困扰着我,因为我不明白,当一个程序涉及到按键应该被处理的时候,例如,如果有一个命令行或其他东西保存文本,并且要处理它,您需要按enter键, 键盘缓冲区如何在“输入”特定程序之前保存文本,并且不与存储在键盘缓冲区中的另一个程序中断?。
还是我不完全明白

物理键盘本身有一个缓冲区,但这不是使用的唯一缓冲区。计算机硬件、操作系统和程序(或框架)本身都可以根据自己的规则缓冲输入。具体细节因硬件和操作系统而异,但通常情况下,您描述的场景确实可能发生。

物理键盘本身有一个缓冲区,但这不是使用的唯一缓冲区。计算机硬件、操作系统和程序(或框架)本身都可以根据自己的规则缓冲输入。具体细节因硬件和操作系统而异,但通常情况下,您描述的场景确实会发生。

因此,如果有命令行,其中有文本,并等待按下“enter”键,它会停留在哪个缓冲区?程序缓冲区还是键盘缓冲区?这取决于平台,但例如,在Windows上运行的.NET控制台应用程序上,如果在应用程序具有焦点时调用
console.ReadLine()
,它将接收键盘输入并将其存储在应用程序级缓冲区中。只有当系统太忙而无法及时处理输入时,它才会停留在较低级别的缓冲区。在这个层次上,“缓冲”实际上只是一个语义概念;系统基本处于静止状态,输入已被处理,转换为UTF-8字符串,并存储在内存中,等待检测到enter键时返回到程序。*一般来说,现代系统不会将键盘输入保留在任何低级缓冲区中。早在80年代,有些软件就是这样工作的,当应用程序在运行时对系统进行完全控制时,但今天你再也不会这样做了。你说的“回到你的程序”是什么意思?,你的意思是作为一个阻塞命令,等待enter保存为一个值并继续剩下的代码吗?从某种意义上说,它是程序的一部分,但我所说的return是指从.NET Framework代码向应用程序代码返回一个字符串。是的,在本例中,它确实会阻止线程的执行,直到检测到返回键——但这是一个特定的实现。就键盘接口而言,它实际上没有什么特别之处——字符串与硬件缓冲区没有直接关系,它是从输入中翻译出来的。例如,长时间按住“A”键可能会生成“A”的多个实例。因此,如果有一个命令行,其中有一个文本,并等待按下“enter”键,它会停留在哪个缓冲区?在程序缓冲区还是键盘缓冲区?这取决于平台,但例如在Windows上运行的.NET控制台应用程序,如果在应用程序具有焦点时调用
Console.ReadLine()
,它将接收键盘输入并将其存储在应用程序级缓冲区中。只有当系统太忙而无法及时处理输入时,它才会停留在较低级别的缓冲区。在这个层次上,“缓冲”实际上只是一个语义概念;系统基本处于静止状态,输入已被处理,转换为UTF-8字符串,并存储在内存中,等待检测到enter键时返回到程序。*一般来说,现代系统不会将键盘输入保留在任何低级缓冲区中。早在80年代,有些软件就是这样工作的,当应用程序在运行时对系统进行完全控制时,但今天你再也不会这样做了。你说的“回到你的程序”是什么意思?,你的意思是作为一个阻塞命令,等待enter保存为一个值并继续剩下的代码吗?从某种意义上说,它是程序的一部分,但我所说的return是指从.NET Framework代码向应用程序代码返回一个字符串。是的,在本例中,它确实会阻止线程的执行,直到检测到返回键——但这是一个特定的实现。就键盘接口而言,它实际上没有什么特别之处——字符串与硬件缓冲区没有直接关系,它是从输入中翻译出来的。例如,长时间按住“A”键可能会生成多个“A”实例。