stdin auf nicht blockierend umschalten
-
Hallo Forum,
kann mir jemand spontan sagen, wie ich stdin auf nicht
blockierend umschalten kann ?Gruss Olli.
-
was wilst du tun?
-
stdin "blockiert" nicht, es können höchstens die Eingabe-/Ausgabefunktionen blockieren. Wenn du eine Einlesefunktion benutzt, dann blockiert sie, falls im Buffer keine Zeichen, die eine gültige Eingabe darstellen vorhanden sind.
Nichtblockierend lesen kannst du entweder in einem zweiten Thread oder indem du mit kbhit() schaust, ob etwas im Buffer für dich vorhanden ist und erst dann die entsprechende Funktion zum Einlesen aufrufst.
-
Wobei man dazu sagen sollte, dass kbhit() systemspezifisch ist.
In Standard ANSI-C gibt es, soviel ich weiß, keine Möglichkeit stdin auf "nicht blockierend" zu setzen bzw. eine alternative Funktion, die dies ermöglicht.
Wenn du was für dein System suchst, dann schau entweder ins Konsolenforum (bzw. in die dazugehörige FAQ) für Windows/DOS oder in das Linuxforum (bzw. in die dazugehörige FAQ), je nachdem welches System du benutzt.
-
Ja, hab ich jetzt nicht dran gedacht, dass kbhit ja aus der "bösen" conio.h stammt
Unter Windows wäre das dann die Funktion ReadFile, die nicht blockiert und die tatsächlich gelesenen Bytes in einem Parameter übergibt.
-
masterofx32 schrieb:
Ja, hab ich jetzt nicht dran gedacht, dass kbhit ja aus der "bösen" conio.h stammt
Also wenn du die conio.h als böse entfindest, dann hilfts wohl nicht. Ich benutze die Funktionen daraus auf jeden Fall gerne :D.