im hintergrund auf tastendruck warten



  • könnte man nicht in einem nicht blockierenden select() auf stdin guggn und, falls daten vorhanden sind, diese lesen?
    finde für diese anwendung einen thread für overkill



  • Klar kannst du auch im Hauptthread regelmäßig nachsehen, ob etwas angekommen ist - aber dazu mußt du schon selber einplanen, wann und wo du nachsiehst.



  • naja, aber mit threading kriegst halt wengl probleme, wenn du des plattformübergreifend machen willst...
    außerdem musste ja dann bei threading irgendwelche handler für signale oder so einsetzen, dass der "hauptthread" merkt, wenn der "nebenthread" ne tastatureingabe bearbeiten will...
    dann kannste dein schedulen gleich selbst übernehmen



  • Hat alles seine Vor- und Nachteile (darum hatte ich oben auch beide Möglichkeiten genannt ;)).

    Übrigens gibt es für das "nicht blockierend auf stdin guggn" auch keine plattform-unabhängige Lösung 😉



  • ich kann doch auf sagen wir mal linux/unix und windows-ebene auf stdin n select absetzen, des geht afaik plattformunabhängig
    oda?



  • Das geht vielleicht auf Linux-Seite, aber auf Windows nicht (zumindest ist weder mir noch der MSDN die Funktion 'select()' bekannt).



  • hmm, ich weiß net, wo du guggst, aber die msdn (online + offline) sagt mir, es gibt select() mit der gleichen syntax, wie unter linux / unix in Winsock2.h

    http://msdn2.microsoft.com/en-us/library/ms740141.aspx



  • Ich hatte auf die Schnelle nur die Offline-Version zur Verfügung und die hat zu select nur DHTML-Methoden geliefert. Aber auf jeden Fall ist select() keine Standardfunktion und damit mußt du darauf hoffen, daß sie auf deinem Zielsystem verfügbar ist.

    (davon, daß ein FILE* etwas anderes ist als ein Socket, will ich hier gar nicht reden)

    Bringen wir mal die Diskussion auf den Punkt: In Standard C++ ist es nicht möglich/vorgesehen, gezielt auf Tastendrücke zu warten. Also mußt du auf OS-Funktionen zugreifen, um das Ziel zu erreichen (oder sie dir selber nachbauen).



  • jo, kloar, aber im übrigen liefert select() weder auf nen socket noch auf nen FILE * zugriff, sondern auf nen file-deskriptor in dem fall, von daher ist es eigentlich für alle möglichen einsatzzwecke denkbar.
    aber recht hast du, es ist nicht im standard, sondern ne betriebssystemspezifische funktion, bei der wahrscheinlich nicht garantiert werden kann, dass sie alle betriebssysteme verstehen



  • Ok, danke für die zahlreichen Antworten.
    Ich denke, das ist mir noch zu hoch, aber ich bin ja fleißig am lernen ^^


Anmelden zum Antworten