2014-01-22 52 views
2

我想在Windows終端應用程序上獲得一個非阻塞I/O(僅限Windows,對不起!)。c中的非阻塞I/O? (windows)

如果我想在輸入時間很短時用戶可以按下一個按鈕,但是如果他沒有輸入停止並且程序繼續,該怎麼辦?

例如:

,從1數到當用戶按下某個鍵什麼的情況下停止計時器: 我應該有一個while循環,但如果我做一個殘培或getchar函數將停止該計劃,對吧?

我知道我可以使用kbhit(); ,但對於我試圖讓我需要知道輸入的「程序」,不僅僅是如果有輸入! 是否有任何簡單的函數可以讓我像鍵盤緩衝區中的最後一個鍵一樣讀取?

+0

是的,_kbhit()告訴你有輸入。調用_getch()實際讀取它,它不會阻塞。 –

回答

3

documentation for _kbhit()

_kbhit功能檢查最近的一次擊鍵控制檯。如果函數返回一個非零值,則鍵盤在緩衝區中等待。程序然後可以撥打_getch_getche來獲得按鍵。

因此,在循環:

while (true) { 
    // ... 
    if (_kbhit()) { 
     char c = _getch(); 
     // act on character c in whatever way you want 
    } 
} 

所以,你仍然可以使用_getch(),但它的使用限制爲僅後_kbhit()說,有一些等待。這樣它就不會阻塞。

+0

我讓這個問題更加「可讀」,對不起,我現在要試一試。 – DmitryB

+0

謝謝你!這不是我正在尋找的確切解決方案,在Linux上使用ncurses可能會有更好的解決方案,但它可行! – DmitryB

+0

是的,你確實專門詢問了Windows而不是Linux。 :) –