百科问答小站 logo
百科问答小站 font logo



计算机中,假设键盘同时按下两个键,会优先生效哪一个? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

从几个层面上来解释一下吧,目前似乎没有太完整的回答。

首先,给一个链接:ti.com/lit/an/slaa514/s

这里有USB键盘的原理图和状态机,能从硬件层面上解释所有的问题。

首先,键盘其实就是一套开关矩阵(key matrix):

按键会接通相关的管脚,产生电信号。如果同时按下多个,就是多个信号。同时,手册上也描述了多个按键的情形,某些组合下,多个按键中的某几个会无法收到信号或者收到错误的信号("Ghost" Key):

所以,不管是按下一个,还是按下多个,对于芯片来说,都是可以处理的。

另外,键盘的键码叫做扫描码(Scan Code),扫描的意思已经很明显了,键盘控制器芯片是从周期性的扫描所有的管脚状态,对于高级的芯片,是一次性能处理多个按键的(比如我发的那个TI的),对于低级的芯片,可能就是一个一个的扫,扫到一个处理一个。所以如果是特别古老的键盘,同时按下几个键,在硬件上仍然是排队处理的。高级的芯片可以一次性获得所有的按键信息。

以TI这个芯片为例,它实际上支持多种模式,具体的扫描方式,手册中也给出了例子:

以上是硬件部分的设计。

再到传输层面上,PS/2和USB,这是两种不同的传输模式。

对于PS/2来说,使用的是键盘中断的方式,报告的是按下和弹起的事件。前面已经解释了,扫描码是从一个一个扫的,所以即使是同时按下,在扫描的过程中也是有先后次序的,按照这个次序报告键盘中断就可以了。

对于USB键盘就没有这种问题,USB键盘的报文格式是HID report,具体可以看这个回答:


HID report里只报告当前按下的按键信息,那么不管是同时按下几个键,都统一放到一个report里即可。所以USB键盘同时按下键位太多的时候,有些按键信息就丢失了。具体原因可以参见:

到了操作系统层面,比如Windows,实际上是针对硬件数据(HID report或者PS/2中断)再次重新解析。对于HID report,操作系统通常情况下就是从头开始读,所以哪个键码在report前面,哪个按键就被优先读取。

我在这个回答里,有描述Windows的处理方式(和调用栈):

复制部分内容出来(注意,调用栈比较老,不代表最新的Windows实现):

       1)硬件中断/硬件端口数据 2)键盘Port驱动(USB or PS/2) //Filter驱动在此 //KeyboardClassServiceCallback也在这一层被调用 3)kbdclass驱动 //处理键盘布局和键盘语言,部分高端的病毒也工作在这里 4)Windows内核边界(zwCreate/zwReadFile) ----------------------(系统调用)---------------------- 5)Windows内核边界(zwCreate/zwReadFile) 6)csrss.exe的win32k!RawInputThread读取,完成scancode和vk的转换 //SetWindowHook工作在这里(全局) //kbd_event工作在这里 7)csrss.exe调用DispatchMessage等函数分发消息(此处开始广播键盘消息) //SetWindowHook工作在这里(进程) //PostMessage和SendMessage在这里 8)各个进程(窗口线程)处理消息     

对于HID report或者PS/2中断信息来说,Windows的kbdclass驱动就会处理(重排),把按键转换成键盘布局指定的键码。Windows应用层是通过csrss.exe的win32k!RawInputThread来以Raw的方式读取按键的,这个时候都是一个一个读的。

这个问题下面有些使用脚本等方式模拟的,实际是在csrss这里实现的,包括Windows的VKEY的定义。

之后,再由csrss广播给各个窗口,这个时候已经是Windows的message格式的东西了。

如果能看得懂,最后放个结论

从根源的位置判断:

a) 对于PS/2类型的键盘,取决于键盘电路上扫描线路的布局,哪个按键的管脚靠前,哪个按键就会被优先扫到并上报;

b) 对于USB类型的键盘,取决于HID report上的次序,在前面的优先被处理,report上的次序可能源于扫描电路的次序,也可能是芯片有特殊控制

c) 操作系统会对键盘驱动获得的按键信息重新处理,实际应用层收到的内容不一定完全等价于总线信号的内容。


user avatar   zou-ding-bang-32 网友的相关建议: 
      

反对一下其他人的回答。。。

其他人的回答都是说:哪怕你以为是同时,但计算机很快,能分辨出先后

但实际上,计算机说快很快,说慢也能很慢

这里的快慢指的是时钟周期

如果把时钟周期调成0.1Hz,也就是10秒一周期,那计算机应该算我们通常意义的“慢”


在一个时钟周期内,所做的所有操作(A-B-A先不考虑),计算机都认为是“同时”

比如以0为起始,在第2秒的时候的操作和第8秒的时候的操作,对计算机来说是同时;第9秒和第11秒不是同时


回到原题

“同时”按下两个键,比如第2秒按了a,第8秒按了b,同一时钟周期,哪个先生效?

不知道

“先后”按下两个键,比如第9秒按了a,第11秒按了b,不同时钟周期,哪个先生效?

a吗?也不知道


为嘛?

现在键盘按键的识别,很多是通过矩阵逐行扫描的方式工作的

比如一个键盘4行4列

会先看第0行哪些键按了,然后再扫第1行第2行第3行,再回到第0行

也就是说需要4个时钟周期,才能扫描完整个键盘

假如你同时(第2秒第8秒)按了两个键,这两个键又在同一行,被同时扫描到

对键盘来说,这一次扫描识别了两个键被按下,我会把这两个键的信息给cpu,至于把a放前面还是把b放前面,完全看写键盘芯片控制程序的程序员的处理方式

那先后按ab呢(第9秒按a,第11秒按b),假如a在第1行,b在第三行,此时扫描到了第2行,一个键也没有,下一个时钟周期扫第三行,那对键盘来说,是b先按了,然后下一轮发现a被按了

如果当时扫描在第0行,那下一个时钟周期,会先发现a被按下了,所以,哪怕你先按了a再按了b,都不能保证a先被生效


user avatar   pansz 网友的相关建议: 
      

不需要,我已经几乎两年没用过有线充电了。

把常用场合都部署好无线充电以后,真的不用操心换手机换充电器之类的事情。

其实很简单的一个问题:取消耳机口之后,各位是改用L口耳机C口耳机,还是改用无线耳机?我曾经以为会普及L口或者C口耳机,然而现实就是无线耳机开始普及。

无线充电座普及之后,由于它没有插拔,所以她的寿命其实远比手机要长。

--

所以,如果你没有无线充,强烈建议你尝试无线充。


user avatar   zignforever 网友的相关建议: 
      

我是一名基层派出所民警。

可以说当今中国警察普遍羡慕美国警察可以采取暴力手段绝对的镇压不法分子。

但是,不得不说,这次这位美国警察,太过分了,不仅是过分,而且我的理解是那已经构成了犯罪行为。那黑人已经制服了就可以正常上拷带走了,没必要一直压着脖子压那么长时间。没能置身其中不知现场那美国警察的所思所想,反正我个人挺不理解他为啥那样干的。

只能说无论什么地方,无论什么行业,只要是人的社会,都有像样的也有操蛋的吧。

_________此处为分割线 _________

以下为统一答复评论中有些人质疑的我所讲的羡慕二字。

能够出现这种质疑在我料想之中,因为中国警察也有过过分的时代,据我所知就是在七十八十九十年代,就如同地痞流氓,看谁不顺眼就能打谁对老百姓而言没王法可讲,那时候的警察说好听点可以说是威风凛凛说难听点儿是横行霸道。

但我想表明的是,时过境迁,现在的中国警察无论是受舆论约束还是因为法治社会建设制度规范都已经变得逐步文明与规范起来,起码我认为从我们现在开始从公安司法院校毕业参加公务员考试考进来的新一代警察已经具备新的面目,当然不可否认的是在这个行业内目前仍然存有历史的顽疾,仍然存在着臭虫,但我已经讲过无论什么行业都有操蛋的吧,这是个人问题,不是群体问题。相比之下,拍拍良心看,现在的整个警察队伍比照曾经确实过分的年代是不是已经是天地之别,问问曾经真正挨过曾经年代老警察欺负的中老年人就知道了。

为何会说起羡慕,因为警察每天面对的人群,大多是三教九流之辈,没有武力加身,很多事情在处理上警察显得软弱无能,说白了,好人谁没事儿上派出所转悠啊都忙着自己的生活呢,警察打人这句话,我们常常听到,但是但凡有点脑袋的人都能想明白,警察会闲着没事儿干把那在家里消停待着的遵纪守法的人抓起来暴揍一顿吗?

以上言辞不免更会有人质疑,请允许我解释,武力,当然不可滥用,我所说的羡慕不是羡慕美国警察的随意滥用武力,而是在合法范围内准许在对方不听从警察指令时动用武力,现在确实有人民警察法赋予了相关权力,但实践中现在的中国警察并不能或者说不敢执行人民警察法里的所有权力。拿防疫工作举例,卡口的工作人员在让出入的人员扫码登记时,就会有不愿意配合的人,然而这些不愿意配合的人可会知道工作人员的所做所为是为了整个社区的稳定安全,因为这整个社区包括了这名不愿意配合的人啊,在这个时候是否应当对其进行武力控制来保障其他居民的安全呢。同理,警察盘查也好,调查也好,总会有那些不愿意配合的人,自我感觉良好认为自己没问题所以警察不必要对其进行盘查所以就不配合,而警察当看到对方不配合时会以什么视角审视,难道要说谢谢您的不配合吗,万一这不愿配合的人真背着案子呢,那便是对更多的人民群众的不负责任。因此,我要说,民众的素质如果真正达到了人人互相敬重路不拾遗夜不闭户的文明程度,要求警察绝对文明不要有暴力举动,一点问题没有,一味强调了警察不该暴力执法而分毫不过问被执法对象自身是否存在问题,是不是看问题的角度些微的片面了些。

请注意,我说羡慕里的那句话尾巴实际已经表明了,羡慕的是暴力手段对不法分子的镇压,可不是对遵纪守法的百姓也要肆意妄为。例如像给群众办个身份证居住证之类的业务,警察当然应该热心服务。但当面对泼皮无赖时,还要笑脸相迎,得来的只有蹬鼻子上脸,警察都不怕了,您们认为这些无赖还有谁管得了。

列位存有异议的同志们,谢谢您们的教诲。言辞中犀利的同志们,谢谢您们的敦促。

让我知道当警察,需要吾日三省吾身。

还想要质疑甚或是骂的您们,若是能让您舒服,骂两句无妨。我不算您辱骂警察。不过是,道不同不相为谋罢了吧。

_____分割线

2020年6月5日22:53 出警在路上




  

相关话题

  如何评价哈工大的左旺孟老师? 
  Cpu访问cache未命中,是否还需要访问一次cache? ? 
  为什么CS有控制台,而其它大部分游戏没有? 
  编程的时候 命名 方法或变量 词穷了怎么办? 
  可以预先将 X86 平台机器码译码到 micro operations 来解决 X86 译码效率低吗? 
  程序员的价值会随工作经验增多而增长么? 
  计算机科学与技术专业的学生要怎样做才能避免成为低级的码农? 
  程序在地址空间中的位置是何时,以及如何决定的? 
  西方学习编程的学生训练打代码时每年要敲坏多少个键盘? 
  计算机学术界是不是喜欢发明一些没什么用的概念? 

前一个讨论
听说CPU性能=IPC×频率,IPC怎么查询呢?
下一个讨论
gettimeofday实现原理,该接口是如何和HPET配合实现微秒精度时间的获取的?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利