J'essaie d'exécuter une boucle while jusqu'à ce que la touche enter soit enfoncée sur le terminal, mais autant que je sache, la boucle s'arrête sur cin.get() jusqu'à ce que quelque chose soit reçu. Existe-t-il un moyen de rendre facultatif l'entrée du terminal et de réexécuter la boucle while? Voici la boucle du code, si je retire les parties cin.get() cela fonctionne bien, je ne peux pas l'arrêter.Exécution d'une boucle while jusqu'à réception d'une entrée spécifique, mais réexécution si rien n'est reçu C++
while (true) {
// In each iteration of our main loop, we run the Myo event loop for a set number of milliseconds.
hub.run(1);
// Extract first timestamp from Myo (string casted as a number)
if (tstart == 0){
stringstream myStream(collector.stampTime);
myStream >> tstart;
}
// Extracting samples from DataCollector
std::array<float, 3> acceData = collector.acceSamples;
std::array<float, 3> gyroData = collector.gyroSamples;
std::array<float, 3> oriData = collector.oriSamples;
std::array<int8_t, 8> emgData = collector.emgSamples;
for (int i = 0; i < emgData.size(); i++){
if (i < 3) {
// Accelerometer samples
acce[i] = acceData[i];
pAcce[i] = acce[i];
// Gyroscope samples
gyro[i] = gyroData[i];
pGyro[i] = gyro[i];
// Orientation samples
ori[i] = oriData[i];
pOri[i] = ori[i];
}
// EMG samples
emg[i] = emgData[i];
pEMG[i] = emg[i];
}
/*
* Plot the result
*/
engPutVariable(ep, "Acce", Acce);
engPutVariable(ep, "Gyro", Gyro);
engPutVariable(ep, "Ori", Ori);
engPutVariable(ep, "EMG", EMG);
engEvalString(ep,"EMG_gather");
// Extract timestamps from Myo (string casted as a number) and compute elapsed time
stringstream myStream(collector.stampTime);
myStream >> tend;
elapsedTime = (tend - tstart)/1000000;
// Keep track of how many runs Myo has performed
x++;
if (x % 30 == 0){
std::cout << x << endl;
}
if (cin.get() == '\n')
break;
else if (cin.get() == '')
continue;
}
Cela ne peut pas être fait en C++ standard, vous avez besoin d'une API spécifique à la plate-forme. – Eugene
Eugène, ce n'est pas vrai. Par exemple, vous pouvez avoir un thread séparé qui lit les données de manière bloquante et utilise la variable de condition pour notifier le thread de travail. Mais il devrait y avoir un moyen plus facile. –