C語言非阻塞式鍵盤監聽

2021-10-17 03:59:46 字數 1011 閱讀 5270

所謂鍵盤監聽,就是使用者按下某個鍵時系統做出相應的處理,本章講到的輸入輸出函式也是鍵盤監聽函式的一種,例如 getchar()、getche()、getch() 等。下面的**演示了 getch() 函式的使用: 

#include #include int main() 

else

}return 0;

}

這段**雖然達到了監聽鍵盤的目的,但是每次都必須按下乙個鍵才能執行 getch() 後面的**,也就是說,getch() 後面的**被阻塞了。

阻塞式鍵盤監聽用於使用者輸入時一般沒有任何問題,使用者輸入完資料再執行後面的**往往也符合邏輯。然而在很多小遊戲中,阻塞式鍵盤監聽會帶來很大的麻煩,使用者要不停按鍵遊戲才能進行,這簡直就是災難,所以在小遊戲中一般採用非阻塞式鍵盤監聽:使用者輸入資料後程式可以捕獲,使用者不輸入資料程式也可以繼續執行。

在 windows 系統中,conio.h標頭檔案中的kbhit()函式就可以用來實現非阻塞式鍵盤監聽。

conio.h 是 windows 下特有的標頭檔案,所以 kbhit() 也只適用於 windows,不適用於 linux 和 mac os。
使用者每按下乙個鍵,都會將對應的字元放到輸入緩衝區中,kbhit() 函式會檢測緩衝區中是否有資料,如果有的話就返回非 0 值,沒有的話就返回 0 值。但是 kbhit() 不會讀取資料,資料仍然留在緩衝區,所以一般情況下我們還要結合輸入函式將緩衝區種的資料讀出。請看下面的例子:

#include #include #include int main() 

}//printf("number: %d\n", ++i);

sleep(1000); //暫停1秒

阻塞式 非阻塞式IO

知識點 非阻塞式io 的兩種設定方法 1 函式fcntl 設定 o nonblock 選項 int flag fcntl sockfd,f getfl,0 檢查檔案標誌位 fcntl sockfd,f setfl,flag o nonblock 設定檔案標誌位 2 函式ioctl 設定fionbio...

阻塞式Socket VS 非阻塞式Socket

主要有三種型別的socket,永久阻塞模式 阻塞加超時模式和非阻塞式。socket模式可以通過apr socket opt set 和apr socket timeout set 這兩個api控制。在windows和unix系統上預設的socket是永久阻塞模式 apr so nonblock ti...

非阻塞式socket

返回錯誤ewouldblock或eagain。套接字的預設狀態是阻塞的。這就意味著當發出乙個不能立即完成的套接字呼叫時,其進 程將被投入睡眠,等待相應操作完成。可能阻塞的套接字呼叫可分為以下四類 1 輸入操作,包括read readv recv recvfrom和 recvmsg共5個函式。如果某個...