Lesen des kompletten Inputs seit dem letzten Lesen



  • Howdy Folks,
    Wie schon im Titel etwas unbeholfen beschrieben:

    Ich suche nach einer Möglichkeit, den kompletten Input seit dem letzten Lesen zu lesen. Sprich, ich möchte, dass der Benutzer in der Konsole tippt und sobald er Return drückt wird die eingabe gelesen. Während des Eintippens können weitere Ausgaben auf der Konsole stattfinden.

    Nach Möglichkeit möchte ich auf einen eigenen Thread verzichten, kann aber auf Events reagieren, welche die Konsole evtl. feuert. (zwischen dem lesen und schreiben warte ich ohnehin auf einige Events) Kennt da jemand nen Ansatzpunkt?
    Komme ich da evtl. sogar schon mit C++ methoden a la std::cin >> std::flush; aus?

    Das ganze soll letztendlich wie eine kleine telnetsitzung funktionieren:
    benutzer schreibt (muss er aber nicht), währenddessen kommen aber neue daten rein, die (ruhig auch während der eingabe) auf stdout ausgegeben werde.

    Schönen Dank!
    wurfholz



  • ok, kann meine Anforderungen noch ein bischen einschränken:

    Wie kann ich herausfinden, ob auf der console etwas getippt wurde (sprich ein neues Zeichen auf stdin vorliegt).

    somit konnte ich zyklisch stdin "pollen" und ggf. ein zeichen lesen und speichern.
    sobald das "Return" zeichen gelesen ist, beende ich das einlesen, verarbeite meine gelesenen zeichen und fange wieder von vorne an.

    ich fürchte nur, ich kann nur von der Console lesen, wenn eine der lesemethoden (getchar(), gets(), scanf() oder cin << xxx;) aktiv sind, kann das sein?

    Das spräche dann wohl doch für einen zweiten Thread!?? 😞



  • kbhit() prüft ob eine Taste gedrückt ist, ganz ohne verpflcihtende Eingabe für den Benutzer.

    MfG SideWinder



  • das Problem ist nur, dass kbhit() nur den Moment des Tastendrucks detektiert, bei dem ich jedoch möglicherweise in meiner "pollschleife" gerade woanders bin und somit den Tastendruck nicht registriere.

    Habe das Problem jedoch wohl schon anders in den griff bekommen (bin jedoch noch am Coden..):

    Mit GetStdHandle(STD_INPUT_HANDLE) hole ich mir den stdin und kann dann mit ReadFile davon lesen. Das kommt mir sehr gelegen, da ich bereits andere I/O mit ReadFile betreibe und es somit ganz gut ins "Gesamtkonzept" (Als ob ich sowas hätte 😃 ) passt.

    Für alle, die mal ähnliches vorhaben: es scheint noch weitere interessante Funktionen zu geben "ReadConsoleInput()", "PeekConsoleInput", "GetNumberOfConsoleInputEvents()". Habe mich aber noch nicht konkret mit beschäftigt.


Anmelden zum Antworten