当键盘输入无限循环停止时 - C

时间:2010-02-25 00:14:37

标签: c input nonblocking

有任何方法可以运行无限循环,仅在用户输入键盘时停止 没有要求每个周期继续?在C程序中 (我正在开发一个用for(;;)循环读取条目的C聊天,我只有在用户想要输入并发送消息时才需要停止它。大家好!

2 个答案:

答案 0 :(得分:6)

您没有指定操作系统,所以我将假设一些符合POSIX标准的操作系统。

您可以使用select。这可用于阻止一组文件描述符(在您的情况下,stdin)具有有限超时或无限阻塞。

我的猜测是,因为这是一个聊天程序,你还想在其他文件描述符上执行此操作,例如聊天tcp套接字。因此,您可以使用一个调用来测试两者的输入。

对于Windows控制台,如果select对你不起作用,你应该可以使用GetStdHandle和WaitForSingleObject / WaitForMultipleObjects。

答案 1 :(得分:2)

在Windows中有很多种方法可以做到这一点。假设您使用的是VC ++,最简单的方法可能就是使用_kbhit()。如果您想直接使用Win32 API,可以调用GetNumberOfConsoleInputEvents()并查看返回值是否为非。

您也可以执行重叠读取,并且每次通过循环调用WaitForSingleObject时超时值为0.零等待意味着它将立即返回是否有输入。返回值将告诉您是否有任何数据:WAIT_TIMEOUT表示尚未读取任何数据,WAIT_OBJECT0表示您有一些数据等待处理。