所謂鍵盤監聽,就是使用者按下某個鍵時系統做出相應的處理,本章講到的輸入輸出函式也是鍵盤監聽函式的一種,例如 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個函式。如果某個...