Übersprungene Eingabe
-
#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 kehrtWaitForSingleObject(..)
direkt mit0
(=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?
-
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