2

有什么方法可以运行一个无限循环,该循环仅在用户从键盘输入时停止,而不要求每个循环继续?在一个 C 程序中(我正在开发一个 C 聊天,它通过for(;;)循环读取条目,只有当用户想要输入和发送消息时我才需要停止它)大家好!

4

2 回答 2

6

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

您可以使用选择。这可用于以有限超时或无限期阻塞来阻塞一组文件描述符(在您的情况下为标准输入)。

我的猜测是,由于这是一个聊天程序,您还希望在其他文件描述符上执行此操作,例如您的聊天 tcp 套接字。因此,您可以通过一个呼叫测试两者的输入。

在 Windows 控制台的情况下,如果选择不适合您,您应该能够使用 GetStdHandle 和 WaitForSingleObject/WaitForMultipleObjects。

于 2010-02-25T00:21:26.553 回答
2

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

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

于 2010-02-25T00:56:33.253 回答