計算機中,假設鍵盤同時按下兩個鍵,會優先生效哪乙個?

時間 2021-05-06 06:26:01

1樓:

首先,基本上電腦的鍵盤掃瞄應該能夠分辨先後。

另外,同時按下同時鬆開(如果真有這本事的話)、先按A再按B鬆開B再鬆開A、先按A再按B鬆開A再鬆開B、同時按下先後鬆開、先後按下同時鬆開,如何解釋,應該取決於鍵盤控制程式。

理論上,不同的按法都可以形成乙個不同的結果,看你要不要對它進行定義了。

比如,完全可以定義「u和:同時按下(包括以上幾種情況)」,表示輸入ü。

2樓:乎到我臉上

不可能同時按下兩個按鍵,我認為鍵盤按鍵的訊號堪比光速,人類是不可能同時將兩個按鍵訊號同時傳達到輸入端。你以為你同時按了,其實可能差了0.00000000000000000001秒,那也不是同時,還是有先後順序。

3樓:韓不寒先生丶

上班摸魚的我看到了這個問題,本著在工作時間不進行本職工作的行為就是賺錢這個原則,我進行了以下試驗:

首先左手中指放在Q和W兩個鍵的中間,保證兩個鍵受力近乎均勻,按下這兩個鍵

就這樣我進行了100次試驗,我規定打出QW記做O,打出WQ記做I於是我得到了6次O與94次I

為了減少試驗誤差,我又進行了100次按下NM鍵的試驗,設定NM為O,MN為I

我得到了4次O與96次I

得出結論是:在QW鍵跟NM鍵中,先出現的是靠左邊的優先生效

4樓:Dezeming

我以前也想過這個問題。

首先,對於單核系統,單執行緒輸入鍵盤而言,同時按下去之後,因為鍵盤有兩種形式,掃瞄或者中斷,或者中斷加掃瞄。對於掃瞄來說就很簡單了,先掃瞄到哪個就哪個生效。

對於中斷來說,其實也很簡單,我們假設只有乙個鍵盤裝置,那麼就算發生了鍵盤響應中斷,也會進行鍵盤內部掃瞄,先掃瞄到哪個,再去執行哪個。

如果同時在兩個usb輸入介面裝置上插了兩個鍵盤,同時產生兩個中斷,這個時候是要按照中斷處理優先順序來判斷哪個先被執行的。

對於真並行的多核心系統,假設程式很不友好,兩個核心分別處理不同的鍵盤裝置(其實一般程式不會這麼無聊),它都有公共介面機制。那麼假設兩個並行的核心都同時接受到了不同的按鍵輸入,我們假設什麼時候生效:顯示在顯示屏上既為生效。

那麼顯示屏作為共享資源(臨界資源),被訪問到是受到一定的保護機制的。兩個執行緒不會同時把輸入顯示出來,否則就亂了套了。

因此,無論什麼情況,結論反正就是,先生效乙個,再生效另乙個唄。

5樓:ABCDEFG

排在前面的先生效,因為計算機通常是用迴圈檢測按鍵是否被按了的。迴圈可以是從小到大,也可以是從大到小。每個按鍵都有編碼,要麼編碼從小到大生效,要麼從大到小生效,取決於具體實現策略了。

6樓:藍言敘

同時出現兩個指令,先執行誰是要考慮到程式本身的排序問題。打個比方。有兩個人同時進入了乙個房間,如果是多執行緒,兩個人可以同時離開房間,而如果是單執行緒就絕不可能出現同時執行的情況。

在這種情況下不管是誰先離開,都是程式在房間中事先排序好順序了

7樓:

首先計算機世界中不存在同時這個概念,即使是這個世界真正意義上的同時發出多個請求,計算機也會將這類請求保留乙個,其他丟棄,這是由於計算機硬體特性決定的。

這個時候問題不是"先處理哪個"而是哪個輸入會被保留,其他的全部丟棄的問題。被唯一保留的那個輸入取決於很多因素,作業系統,硬體特性,其他處理環節相關演算法什麼的。

因為我們實際上幾乎無法實現真正意義上的同時輸入,所以做按鍵實驗幾乎無法重現真正意義上的只保留乙個的實驗結果,可觀察的現象一般是看起來隨機排序的,這個結果實際上是非同時輸入的結果。

8樓:bob wei

有種輸入法叫並擊輸入法,就是同時按下多個鍵子來打字。當然,人類很可能做不到絕對的同一時刻按下多個鍵,但是,在乙個有鍵位衝突的鍵盤上,連97、合金彈頭都玩不好,不是嗎?

湊個熱鬧~

9樓:閱讀修身

(1)實驗1——左手食指和中指按鍵實驗

中指按1,食指按2,使用中指和食指同時在主鍵盤數字區,按了10次,出現的結果如下:

21-21-21-21-21-21-21-21-21-21

會不會使用左手的這兩個指頭和使用右手的結果不一樣呢?於是我進行了實驗2。

(2)實驗2——右手食指和中指按鍵實驗

為了和實驗1對照,於是我仍舊使用右手的中指按1,食指按2。在主鍵盤數字區按了16次,結果如下:

21-21-21-21-21-21-21-21-21-21-21-21-21-12-21-21

統計發現,在16次按鍵中,只有一次是12,剩餘的全是21。

為什麼左手右手都是21出現的呢?難道說,食指比中指更靈敏嗎?

因此我進行了實驗3,使用左手和右手的食指,分別按1和2。

(3)實驗3——左手食指按1,右手食指按2實驗

12-12-12-12-12-12-12-12-12-12

十次實驗又變成了先1後2,怎麼回事兒呢?難道說左手食指比右手食指反應快?右腦比左腦反應速度快。於是我進行了實驗4。

(4)實驗4——右手食指按1,左手食指按2實驗

21-21-21-21-21-21-21-21-21-21

十次實驗結果,全是2在前1在後。

如果和3對比的話,應該是左手食指反應比右手食指反應更快,而對應的是右腦反應比左腦更快。

那麼還有疑問,如果右腦的反應比較快的話,那麼左手的其它指頭也應該比右手更快才對。

於是我做了實驗5。

(5)實驗5-右手中指按1,左手中指按2實驗

21-21-21-21-21-21-21-21-21-21

同樣的2比1先出現,說明了什麼問題,說明左手的反應速度比右手的反應速度更快。

對於計算機而言,咱們人類意義上的同時對於計算機而言並不是同時,只是我們自己察覺不到。所以哪個鍵先輸入主要在於哪個手反應更快,如果考慮到大腦的反應速度,那麼,左手反應會快於右手。

但是對於同一隻手來說,哪乙個更靈活,反應更靈敏,它輸入的時候就會最先顯示哪個。

以上

10樓:dremofly

感覺高讚答案已經說的很清楚了。鍵盤想主機傳送的HID碼是有順序的,因此同時按下兩個鍵主機收到的按鍵也是有先後順序的。

從硬體的層面上來說,按鍵的識別也是有順序的。

首先我們要知道鍵盤是如何識別按下去的是哪個鍵的。以乙個藍芽鍵盤為例子,藍芽鍵盤中間是有一塊微控制器作為主控晶元的。比如說nrf52832。

這個微控制器對於藍芽按鍵的掃瞄順序與按鍵的接線順序是由關係的。這裡就不展開講這個鍵盤掃瞄的接線了。有興趣的可以去了解。

11樓:

忽然想起小時候玩盜版遊戲機的故事

那個遊戲機,雙人遊戲,P1打P2的時候,往往是單方面的暴打因為程式預設同時按鍵判定為P1打P2

如果你用的是P2而對手用的P1,你只能被暴打一頓。

哪個按鍵先起作用跟程式有關

眾所周知絕大多數程式都是單執行緒的

所以哪個鍵優先生效只取決於程式如何設計。

當然,現在的電腦,一般都會考慮同時按鍵這個說法,而不會發現P1有按鍵直接讓P1打斷P2的行動

12樓:卡拉迦迪斯

這個我還真不知道……

想了想,估計是要記錄鍵盤當前按鍵狀態的

然後,每個迴圈週期(這個我不知道是多久,應該很短,比如 0.1/0.01毫秒?)

查一下當前的鍵盤按鍵狀態。

之所以這麼猜,是因為 js裡有按下、抬起、單擊、雙擊等操作……這樣,鍵盤幾個按鍵同時按下,都是修改鍵盤按鍵狀態。

然後再下乙個迴圈週期,按檢查順序來確定先後。

——當然,也可能是都讀出狀態以後,統一處理。

那麼用鍵盤打模擬器KOF97會鎖鍵,大概也是因為這樣了?

13樓:嵌入式Linux

這個問題涉及計算機中的中斷。

任意乙個時間點,CPU只能處理一件事情,我說的是單核。

我們平時看到的CPU乙個時間點處理很多事情,那是因為計算機處理速度太快了,我們肉眼完全分辨不出來,讓我們誤以為微控制器有很多人在給我們做事情,這就涉及多工,多執行緒的問題。

不知道你們看過閃電俠沒有,閃電俠因為速度夠快,所以就出現了乙個時間跟很多人交流的情況。CPU也是,你以為他是很多人,其實他就是乙個人。單核

既然是中斷,那麼久存在,你以為你同時按下了兩個按鍵,不管如何快,機械反應總是有先後的,所以計算機就先處理先按下的那個按鍵。

那肯定有人說,你不要跟我說機械反應先後,我就保證沒有先後,我就是同時按下了了?

這個就涉及中斷的巢狀

我們說了,乙個時間點只能處理乙個事情

剛開始第乙個按鍵按下,CPU去中斷裡面讀取鍵值,另乙個中斷又來了。

這個是千鈞一髮的時候,時間非常非常短,可以說是同時發生了,這個時候CPU就巢狀執行,還是選乙個中斷執行完了再去執行另乙個中斷。

那有人又說了,你舉的那個例子扯淡,我說的是完全按下了,就是完全按下了。

那我也說了,CPU一定是又先後的。

所以就出現了中斷管家,很多個中斷都同時過來了,中斷管家選擇中斷級別高的優先給CPU處理。

那怎麼處理兩個按鍵同時按下的情況?

那更簡單了,還是用時間,在這個按鍵沒有抬起的時候,如果有另乙個按鍵進入,就是同時按下了。

這個就是組合鍵~~

14樓:鵝鵝鵝鵝鵝鵝

你以為的快啥也不是,現在cpu的每秒計算單位是Mhz,你看看這個單位是多少個零你就知道人手動測試是沒有意義的

兆寫作(上面的M):1000000000000。兆:代表的是10的12次方。作為數量單位,在古漢語中,表示一萬億。

15樓:改個名字

emmm我來說個通俗易懂的吧,計算機怎麼獲取你的鍵盤輸入呢,就是快速的掃瞄,檢測哪些鍵被按下了,這個掃瞄是乙個鍵乙個鍵掃的,所以同時按下兩個鍵優先響應哪個有很大的不確定性。可能性對半開吧,當然也可能某些鍵被設定個特定的優先順序,要響應的快

16樓:木月飄零

同時按下兩個鍵如果僅僅顯示在同一控制項上,不存在同時(顯示在在控制項上,必然是先後)。

程式在單執行緒情況下,順序執行,不純在同時,所以同時按下條件不成立。

多執行緒情況下,並行(忽略電腦執行速度不同),如果分別顯示兩個控制項上,則是同時,如果同時顯示在乙個控制項上,如果沒有程式鎖,程式會進入死鎖狀態。

問題就在於有鎖的情況下同時,哪個先生效。

答案是:隨機

17樓:北極

從幾個層面上來解釋一下吧,目前似乎沒有太完整的回答。

這裡有USB鍵盤的原理圖和狀態機,能從硬體層面上解釋所有的問題。

首先,鍵盤其實就是一套開關矩陣(key matrix):

按鍵會接通相關的管腳,產生電訊號。如果同時按下多個,就是多個訊號。同時,手冊上也描述了多個按鍵的情形,某些組合下,多個按鍵中的某幾個會無法收到訊號或者收到錯誤的訊號("Ghost" Key):

所以,不管是按下乙個,還是按下多個,對於晶元來說,都是可以處理的。

另外,鍵盤的鍵碼叫做掃瞄碼(Scan Code),掃瞄的意思已經很明顯了,鍵盤控制器晶元是從週期性的掃瞄所有的管腳狀態,對於高階的晶元,是一次效能處理多個按鍵的(比如我發的那個TI的),對於低階的晶元,可能就是乙個乙個的掃,掃到乙個處理乙個。所以如果是特別古老的鍵盤,同時按下幾個鍵,在硬體上仍然是排隊處理的。高階的晶元可以一次性獲得所有的按鍵資訊。

以TI這個晶元為例,它實際上支援多種模式,具體的掃瞄方式,手冊中也給出了例子:

以上是硬體部分的設計。

再到傳輸層面上,PS/2和USB,這是兩種不同的傳輸模式。

對於PS/2來說,使用的是鍵盤中斷的方式,報告的是按下和彈起的事件。前面已經解釋了,掃瞄碼是從乙個乙個掃的,所以即使是同時按下,在掃瞄的過程中也是有先後次序的,按照這個次序報告鍵盤中斷就可以了。

對於USB鍵盤就沒有這種問題,USB鍵盤的報文格式是HID report,具體可以看這個回答:

Linux 是如何實現鍵盤 USB 碼到 Keycode 的對應的?

HID report裡只報告當前按下的按鍵資訊,那麼不管是同時按下幾個鍵,都統一放到乙個report裡即可。所以USB鍵盤同時按下鍵位太多的時候,有些按鍵資訊就丟失了。具體原因可以參見:

PS/2介面還有什麼可存在的意義?

到了作業系統層面,比如Windows,實際上是針對硬體資料(HID report或者PS/2中斷)再次重新解析。對於HID report,作業系統通常情況下就是從頭開始讀,所以哪個鍵碼在report前面,哪個按鍵就被優先讀取。

我在這個回答裡,有描述Windows的處理方式(和呼叫棧):

為什麼作業系統的事件監聽不會占用100%的CPU?

複製部分內容出來(注意,呼叫棧比較老,不代表最新的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) 作業系統會對鍵盤驅動獲得的按鍵資訊重新處理,實際應用層收到的內容不一定完全等價於匯流排訊號的內容。

從就業角度看,計算機視覺和語音處理方面兩個方向哪個更好?

lonely fish 目前行業內的人員需求,做語音的一直比較緊缺,做視覺的一大把。但從崗位數量分析,針對視覺的崗位還是比語音的多,因為視覺的應用範圍更廣。可以結合自己的愛好進行選擇。這兩個方向,只要做好了,未來都可期。 小菜鳥 從學術上來講,cv出文章相對選擇較多,但如果從工業界來說,目前cv基礎...

軟體工程和電腦科學與技術這兩個專業哪個好?還有以後分別能從事什麼工作?

就我們學校軟工學費貴,高中錄取分數低 前幾年軟工甚至是提檔線 研究生錄取難度低幾個量級。課程相似,有些同學認為即使名字相同,軟工的課程相對水。軟工就業導向更明顯,學生實習情況更好一點。就業學歷方面基本沒啥影響,主要看個人水平,實習好會更好一點。總體科研水平計算機更好,部分牛組會有特殊招募,普通的差別...

計算機專業金融方向的大學生學校還有兩個方向應該怎麼選擇

尚學堂官方 這兩個方向都不錯,選擇哪個其實更多的是看你自己的意向,至少可以告訴你選擇哪乙個方向的前景都是非常不錯的。對於金融方向不是很了解哈,所以就簡單說說計算機專業這個方向,選擇web前端開發是不錯的,火熱了這麼多年,未來就業肯定是不用擔心的。而且題主所考慮的前景,web前端也是很好的,前景一片光...