前言
在我们平时控制台程序的编写过程中,一般情况下都是需要暂停控制台界面,等待用户输入数据之后,程序才会继续运行下去。但是某些情况下,我们希望在循环在用户输入一个按键时才响应特定程序。
常规做法是使用多线程, 如: 子线程中执行任务, 主线程线程中检测用户输入, 然后根据用户输入, 来控制工作线程状态;
如果仅仅是快速做测试, 可以使用C语言中的kbhit()和getch()来实现上述功能.
个人理解: kbhit()内部也是封装了一个线程来检测用户键盘输入.
示例
#include <iostream>
#include <conio.h> // _kbhit(), _getch()
#include <windows.h>
int main()
{
int counter = 0;
char exitflag = '\0';
while (1)
{
std::cout << ++counter << ": hello error!\n";
Sleep(50);
//函数名:kbhit()
//功能及返回值: 检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
if (_kbhit())
{
// 函数名: getch()
// 功能及返回值: 从键盘上读取到的字符
exitflag = _getch();
if (exitflag == 'q' || exitflag == 'Q')
{
std::cout << "用户输入:" << exitflag << ", 退出循环\n";
break;
}
}
}
std::cout << "已经退出了循环\n";
return 0;
}
// 注:Windows下不推荐使用POSIX。建议使用使用标准C++相似的名称:_kbhit(), _getch()