Ich versuche, die C + + Standardeingabe Stream Cin zu verwenden, um eine Benutzereingabe zu erhalten, ohne die Ausführung des Programms zu blockieren. Ich habe diesen Code:mit C++ Eingangsstrom cin ohne Blockierung
char ch;
int flag=1;
do
{
if(cin.rdbuf()->in_avail())
{
cin.get(ch);
flag=0;
}
else
//do something else
}while(flag);
//do something with the input
Die Idee hier ist für die Benutzereingabe warten, ohne zu blockieren, während etwas anderes zu tun, und sobald der Benutzer eine Eingabe liefert wir den Eingang (alle in einem Thread) verarbeiten. Aus der Dokumentation weiß ich, dass die streambuf-Klasse, die vom Eingabedatenstrom verwendet wird, die Funktion in_avail() bereitstellt, die Werte ungleich Null zurückgibt, wenn im Puffer ein Eingabebereitschaftswert vorhanden ist. Der obige Code funktioniert nicht so wie ich es erwartet habe und läuft für immer, selbst wenn ich irgendwann eine Tastatureingabe habe. Ich benutze MS Visual Studio 2005 in Windows 7. Was fehlt mir hier?
Mögliches Duplikat von [Nicht blockierende Konsoleneingabe C++] (http://StackOverflow.com/questions/6171132/non-blocking-console-input-c) – Pierre
in_avail macht nicht, was Sie wollen. Es gibt keine Möglichkeit, das zu tun, was Sie wollen, wenn Sie nur die Standard-C++ - Bibliothek verwenden *, es sei denn, Sie sind bereit, mit mehreren Threads zu arbeiten. –
@n.m Kannst du ein bisschen erklären, warum nicht in_avail das macht, was ich in diesem Fall will? –