Auf verschiedene Inputs reagieren [solved]



  • Hullo

    ich beschaeftige mich gerade mit socker programmierung unter linux, und bin mitlerweile an dem Punkt angelangt an welchem ich gerne mich sowohl um eingende Packete, als auch um die Eingabe des Benutzers kuemmern will. Was gibts es fuer Moeglichkeiten sowohl auf Benutzer eingaben als auch auf "externe" Eingaben zu reagieren?

    Ueberlegt hab ich mir die folgenden:
    # seperaten threat der sich nur um das richtige Einlesen und der Benutzer eingabe kuemmert, und dann per socket dem Hauptthreat the Eingabe zukommen laesst.
    # die Eingabe Funktion Zeichenweise zu realisieren, und nur dann aufzurufen wenn eine Taste gedrueckt wurde, und dann diese taste an die bestehenden Eingaben anhaengen, bis ein gesammter Satz eingegeben wurde.
    # den stdin fd in the select gruppe mit aufnehmen, und dann mit recv den buffer auslesen, ohne in im system zu leeren, und zu ueberpruefen ob eine gesammte Zeile eingeben wurde.

    Was fallen euch sonst noch fuer Moeglichkeiten ein, oder wie wird normalerweise mit so einem Fall umgegangen?



  • Ich würde die Methode mit select nehmen, da du dir hier den Stress mit der Syncronisation der Threads spaarst. Wenn du dein Programm aber nach Windows portieren willst, dann geht das aber nicht mit select, da select unter Windows nur mit sockets funktioniert.



  • man: select(2) ist zwar am portabelsten, aber man: poll(2) und ab Linux 2.5.44/2.5.66 gibt es mit man: epoll(2) eine noch schnellere Alternative.

    Um die ganzen Probleme zu umgehen und je nach Platform die beste Möglichkeit zu nutzen, solltest du dir vielleicht Event Notification Bibs angucken, wie libevent oder fnord/enot.

    Threads haben den Vorteil, dass sie auf Mehrprozessor/Multicore-Systemen besser skalieren können, aber dafür musst du dich um die Synchronisation kümmern, was im schlimmsten Fall das ganze wieder ausbremsen kann.



  • Danke fuer die Antworten, hab mich fuer die select variante entschieden.
    Ich warte auf eingaben, lese diese dann mit read aus, und verarbeite sie weiter.


Anmelden zum Antworten