C ++ ifstream von Linux nach Arduino

original code

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    ofstream arduino_output("/dev/ttyACM0");
    ifstream arduino_input("/dev/ttyACM0");

    int value;
    string txt;

    while(cin >> value){
        arduino_output << value << endl;
        arduino_input >> txt;//I never recieve the "OK" (Which I should get)
        cout << txt;
    }

    arduino_input.close();
    arduino_output.close();
    return(0);
} 

Hier ist das Problem:

        cin >> value;
        arduino_output << value << endl;
        arduino_input >> txt;//I never recieve the "OK" (Which I should get)
        cout << txt;

aber wenn ich das mache, funktioniert es:

        cin >> value;
        arduino_output << value << endl;

        for(int i=0;i<10000;++i)
        for(int j=0;j<10000;++j){ //Waste a lot of time
           ++value;
           --value;
        }

        arduino_input >> txt; //I always recieve the "OK"
        cout << txt; //I can see the "OK"

Wie kann ich meinen schnellen Computer in die Lage versetzen, die langsame Ausgabe des Arduino zu lesen? (Ohne for-Schleifen zu verwenden, um Zeit zu verschwenden)

Hier sagt es ein paar Dinge über Rückrufhttp: //www.cplusplus.com/reference/ios/ios_base/register_callback aber ich konnte es nie zum Laufen bringen. Es werden 3 Ereignisse unterstützt, und keines davon ist: "Wenn der Eingabepuffer nicht leer ist, rufen Sie diese Funktion auf."

Denn die ultimative Lösung wäre eine Rückruffunktion, wenn der Eingabepuffer nicht leer ist.

Eine akzeptable Lösung wäre eine C ++ - äquivalente Version der Arduino-Version "Serial.available ()".

Eine andere akzeptable Lösung wäre alles, was mich zwingt, mich nicht auf zwei for-Schleifen zu verlassen. 3 for-loops sind nicht akzeptabel, wenn Sie das denken.

EDIT1: Zeigt den Originalcode
EDIT2: Ich benutze Linux (Lubuntu)
EDIT3: Jemand wurde verwirrt, wo der Code geschrieben wurde. Seltsam

Antworten auf die Frage(4)

Ihre Antwort auf die Frage