我在這裏是一個循環,應該每500毫秒讀取一臺設備上的輸出。這部分工作正常。但是,當我嘗試引入cin.get來提取正在按下的關鍵字「n」來停止循環時,我只能得到與此時按鍵數量一樣多的輸出。如果我按下任意鍵(除了'n')幾次然後輸入,我會得到更多的輸出。我需要的是循環保持循環,沒有任何交互,直到我希望它停止。C++在任何時候按鍵按下
下面的代碼:
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(GetAsyncKeyState(0x4E)&0x8000)'替換if(cin.get()=='n')''。 'cin.get()'被阻塞。但是,在那裏有500毫秒的延遲,並不是那部分循環的大部分會進行異步檢查。有更好的方法可以做到這一點,但如果你稍微保持一個鍵或運氣好的話,那將會奏效。 – chris 2013-05-05 03:53:49
它工作正常,但我需要按住一下鍵,稍後可能會成爲問題。請您指出我正確的方向,以替代解決方案嗎? – 2013-05-05 04:25:36
您可以在您自己的進程中附加一個鉤子來監視擊鍵,並在n命中時通知循環。或者,你*可以*在單獨的線程中獲得輸入,這似乎是新答案的路線。 – chris 2013-05-05 04:30:38