Übersprungene Eingabe



  • Hi bin derzeitig auf der Suche nach einer Funktion die quasi wie

    getch()

    eine Eingabe abfängt aber das nur über einen Bestimmten Zeitraum von Zb. 5 Sekunden. Wenn dann in diesen 5 Sekunden nichts in die Console eingegeben wird
    soll sie Eingabe übersprungen und die Einzugeben Variable Zb. a = 0 sein. Kennt einer Von euch so eine Funktions oder steht sogar so was in irgendeinem Standard Header, danke schon mal im voraus.



  • Da wirst du das Betriebssystem bemühen müssen. Linux : poll oder select.



  • Windows: zB. WaitForSingleObject



  • Danke für die Schnelle Antwort aber,

    Kannst du mir vielleicht ein Beispielcode damit geben. Ich verstehe nicht wie man das Richtig benutzt. 😕
    Es soll vor dem Übersprung 5 Sekunden warten.



  • #include <windows.h>
    #include <iostream>
    #include <string>
    
    bool isEingabe(unsigned mSec)
    {
       HANDLE in = GetStdHandle(STD_INPUT_HANDLE);
    
       DWORD waitResult = WaitForSingleObject(in, mSec);
       if(waitResult == WAIT_TIMEOUT)
          return false;
    
       return true;
    }
    
    int main()
    {
       std::string eingabe;
    
       if(isEingabe(5000)) // 5000 Millisekunden auf eine Eingabe warten
          std::cin >> eingabe;
       else
          eingabe = "Keine Eingabe\n";
    
      std::cout << "Eingegeben wurde: " << eingabe;
    }
    


  • Will nicht undankbar klingen aber das funktioniert nicht. 👎

    Hab grade deinen Code ausprobiert bei mir wartet er bis ins unendliche Ich hab das ding ne viertel Stunde laufen lassen aber merken tut er das bei mir nicht.Hast du dich vielleicht verschrieben oder so 😕

    P.s
    benutze zum Programmieren DEV-C++



  • Das Handle zu STD_INPUT_HANDLE scheint immer schon im signalisierten Zustand zu sein. Zumindest kehrt WaitForSingleObject(..) direkt mit 0 (= WAIT_OBJECT_0 ) zurück.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • FP C++ Neuling schrieb:

    Hab grade deinen Code ausprobiert bei mir wartet er bis ins unendliche Ich hab das ding ne viertel Stunde laufen lassen aber merken tut er das bei mir nicht.

    Hat doch nix mit undankbar zu tun!

    Ich habe den Code, so wie er ist, gerade in eine Quelldatei gepackt, daraus ein Ladeprogramm erstellt, eine Konsole geöffnet, die exe - Datei ausgeführt, und es funktioniert einwandfrei.

    Testest Du evtl. aus Deiner IDE heraus? Möglicherweise funktioniert das nicht! Falls ja, merke: Konsolenprogramme heißen Konsolenprogramme, weil man sie in der Konsole ausführt!
    Falls nein: seltsam!

    Nachtrag dazu: Ich habe mal auf die exe-Datei im Explorer doppelt geklickt. Dann startet das Programm, die Waitfunktion kehrt aber auch nicht zurück - also, wie gesagt, mach mal eine Konsole auf, und starte von dort.

    @theta:
    Da habe ich keine Erklärung für, siehe oben (Win 7 64 bit). Hast Du vielleicht, warum auch immer, Deine Konsole so eingestellt, dass sie auch auf Maus-Input reagiert?
    Lies doch mal via ReadConsoleInput, was Du so geboten bekommst, wenn das Ding sofort zurückkommt ...



  • Auf die Maus Reagiert er nicht aber auf Sondertasten wie Pfeil oder strg
    Benutze 32 Bit vielleicht liegt es daran? 😕



  • Nö, das macht doch (fast) jede Konsole ... noch einmal:

    Testest Du evtl. aus Deiner IDE heraus?

    Oder öffnest Du eine Konsole (wie sich das gehört) und startest Dein Programm durch Eingabe des Programmnamens und [Enter]?



  • Für gewöhnlich mache ich keines von beiden oder meinst du das ich das Porgramm aus dem Programm (Dev C++) was ich fürs Programmieren verwende aus starte für gewönhlich drück ich immer auf Kompilieren und ausführen den Rest mach das Programm Selbst.



  • FP C++ Neuling schrieb:

    für gewönhlich drück ich immer auf Kompilieren und ausführen den Rest mach das Programm Selbst.

    Das könnte ja der Knackpunkt sein, siehe oben.

    Aber das machst Du doch sowieso nur während der Entwicklung, wenn Dein Programm mal fertig ist, startest Du es doch ohne Deine IDE, also ohne kompilieren ...

    Also versuche noch einmal, eine Konsole zu öffnen und das Programm dort zu starten, ich denke, dann wird es funktionieren.



  • Habe mehrmals versucht das ganze zu Starten natürlich aus der IPP heraus. Doch auch hier habe ich das gleiche Problem es wartet ins unendliche.



  • Was ist IPP?


  • Mod

    Nach meinem Dafürhalten ist das der falsche weg

    Das wäre korrekt: ReadConsoleInput
    https://msdn.microsoft.com/en-us/library/windows/desktop/ms685035(v=vs.85).aspx


Anmelden zum Antworten