Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Konsole - ENTER-Tastendruck abfangen und auswerten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.09.2015, 15:24 Uhr
~TheBrownShape
Gast


Hallo,

ich programmiere schon seit einiger Zeit mit C++ und bin mir natürlich über std::cout und std::cin im Klaren. Nun verbrachte ich die letzten Projekte mit grafischer Programmierung (mit SFML), schreibe nun allerdings an einem TeamSpeak 3 Bot, wo ich Hilfe beim Umgang mit der Konsole benötige. Wie gesagt, ich habe lange nicht mehr mit ihr gearbeitet und habe folgendes Problem:

Der Bot läuft die ganze Zeit über eine while()-Schleife und einer sehr sehr geringen Frequenz von 1-20 Ticks/Sekunde, das heißt der Schleifeninhalt wird 1-10 mal pro Sekunde ausgeführt. Ich möchte allerdings in der Konsole zeitgleich Befehle geben und anderes. Also brauche ich eine Funktion, mit der es möglich ist, zu testen, ob ENTER gedrückt wurde und was davor eingegeben wurde. Denn std::cin kann ich nicht verwenden, da dies auf eine Eingabe wartet und das Programm blockieren würde, auch wenn ich z.B. garnichts eingeben möchte. Der Zeitpunkt der Eingabe der Befehle ist immer unterschiedlich, der Bot / die Schleife soll aber die ganze Zeit durchlaufen. Es wäre außerdem gut, wenn ich dafür nicht mehrere Threads nutzen müsste, denn damit habe ich keine Erfahrung und der Bot muss auf jeden Fall stabil laufen.

Mit freundlichen Grüßen
TheBrownShape
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.09.2015, 01:35 Uhr
ao

(Operator)


Das geht nur systemspezifisch, weil die ISO-Standards nichts definieren, womit stdin auf vorhandene Zeichen getestet werden kann.

Wenn du auf irgendwas programmierst, was POSIX kann (Linux zum Beispiel), dann nimm doch mal select() oder poll() unter die Lupe. Auf Windows geht das leider nicht.

Oder versuchs einfach mal mit Threads. Ist auch kein Hexenwerk, und dass Multithread-Programme grundsätzlich nicht stabil sind, ist gelogen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.09.2015, 11:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


oder schau dir z.b ncurses an, das ist ein bibliothek die dir das (platformunabhängig) abnimmt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.09.2015, 17:22 Uhr
~TheBrownShape
Gast


Danke für eure Antworten!

Ich werde mir beides mal anschauen. Der Bot wird nur unter Linux laufen, also würde das mit select() und poll() reichen, aber wenn es mir ncurses einfacher macht, werde ich vielleicht auch das verwenden :).

btw. Ich wollte damit nicht sagen, dass Multithread-Programme grundsätzlich nicht stabil laufen, sondern vielmehr, dass wenn ich das erste mal ein Multithread-Programm schreibe, dieses wahrscheinlich nicht sehr stabil laufen wird, weil ich darin keine Erfahrung habe :DD
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.09.2015, 17:24 Uhr
~TheBrownShape
Gast


Achso, weiß einer wie das bei großer z.B. Serversoftware (auf z.B. Linux) gemacht wird ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.09.2015, 17:40 Uhr
ao

(Operator)



Zitat von ~TheBrownShape:
eine Funktion, mit der es möglich ist, zu testen, ob ENTER gedrückt wurde und was davor eingegeben wurde.

Na ja, so ist es falsch formuliert, das wird nicht klappen: Wenn Enter gedrückt wurde, das abholen, was vorher gedrückt wurde.

Du musst testen, ob irgendwas gedrückt wurde (das kriegst du mit select oder poll). Wenn ja, holst du den Input ab (mit read) und speicherst ihn. Und wenn du bei read ein ENTER zurückbekommst, dann weißt du, die Eingabe ist vollständig, und verarbeitest sie.


Zitat:
Achso, weiß einer wie das bei großer z.B. Serversoftware (auf z.B. Linux) gemacht wird ?

Serversoftware kriegt normalerweise keinen Input von stdin.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.09.2015, 15:24 Uhr
~TheBrownShape
Gast


Ja okay, soweit habe ich das verstanden. Nur sind select() und poll() ganzschön kompliziert :/ Ich werde mein Projekt sowieso vorerst ohne Eingaben weitermachen, und alles andere fertig machen. Wenn ich irgendwann soweit bin, Eingaben verarbeiten zu wollen/müssen, werde ich mich bezüglich select() und poll() informieren.

Ich danke!

Mit freundlichen Grüßen
TheBrownShape

//Close
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: