我这里有一个循环,它应该每隔500毫秒读取一次设备上的输出。这部分工作得很好。然而,当我尝试引入cin.get来捕获按下键盘上的“n”键以停止循环时,我只收到了到此为止按下的键数相同数量的输出。如果我按下任何键(除了“n”)多次并按回车键,我将会得到更多输出。我需要的是让循环保持运行直到我想要停止,没有任何交互。
我的输出如下(在程序中有2个按键才能到达此阶段),除非我按几个键,然后按回车:
以下是代码:
for(;;)
{
count1++;
Sleep(500);
analogInput = ReadAnalogChannel(1) / 51.0;
cout << count1*0.5 << " " << analogInput << endl;
outputFile << count1*0.5 << ", " << analogInput << endl;
if (cin.get() == 'n') //PROBLEM STARTS WITH THIS INTRODUCED
break;
};
我的输出如下(在程序中有2个按键才能到达此阶段),除非我按几个键,然后按回车:
0.5 0 // as expected
1 2 // as expected
should be more values until stopped
我并没有特别偏好使用哪种类型的循环语句,只要它能正常工作就可以。
谢谢!
Sleep
,最快的方法是将if (cin.get() == 'n')
替换为if (GetAsyncKeyState(0x4E) & 0x8000)
。cin.get()
是阻塞的。虽然在其中有500毫秒的延迟,但循环的一小部分并没有用于异步检查。有更好的方法,但如果您按住键一段时间或运气好的话,这种方法也可以工作。 - chris