C 中的非阻塞 I/O?(视窗)

Dmi*_*ryB 4 c io nonblocking

我正在尝试在 Windows 终端应用程序上获得非阻塞 I/O(仅限 Windows,抱歉!)。

如果我想要一个短的输入时间,用户可以在其中按下按钮,但如果他不输入就会停止并且程序会继续,该怎么办?

例如:

一个从 1 计数到用户按下某个键时停止的计时器:我应该有一个 while 循环,但如果我执行 getch 或 getchar 函数,它会停止程序,对吧?

我知道我可以使用 kbhit(); ,但对于“程序”,我试图让我需要知道输入,而不仅仅是如果有输入!是否有任何简单的函数可以让我像键盘缓冲区中的最后一个键一样读取?

Gre*_*ill 7

文档中_kbhit()

_kbhit函数检查控制台是否有最近的击键。如果函数返回非零值,则表明缓冲区中正在等待按键操作。然后程序可以调用_getch_getche来获取击键。

所以,在你的循环中:

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

因此,您仍然可以使用_getch(),但仅限于在_kbhit()表示有东西等待之后使用。这样就不会阻塞。