假设我有一个像
这样的循环for(int i = 0; i < 100000; i++)
{
crunch_data(i);
if(i_has_been_hit())
break;
}
我想在键盘上按 i 时退出循环。现在,以下方法无法工作,因为std::cin
会阻止:
bool i_has_been_hit(){
char a;
std::cin >> a;
return a == 'i';
}
是否有一个功能可以让我检查键盘是否被击中而没有阻塞?如果它有所不同,我在Win32上使用g ++和CodeBlocks。
答案 0 :(得分:0)
您的意思是完美的非阻塞I / O模型吗?如果是这样很难实现,我不知道现有的方法,但你可以做这样的事情
使用 _kbhit()
for(int i=0;i<100000;i++)
{
cout<<"Hi";
while (true) {
if (_kbhit()) {
char a = _getch();
// act on character a in whatever way you want
}
Sleep(100);
if(a=='i')
break;
}
答案 1 :(得分:0)
如果您使用的Win32与conio.h
可用,则可以使用通常的kbhit()
和getch()
组合:
#include <conio.h>
#include <iostream>
int main(){
for(int i=0;i<100000;i++)
{
std::cout<<"Hi";
if(kbhit() && getch() == 'i'){
break;
}
// other code
}
}