Multithreading? - geht's auch einfacher?
-
Hallo
Wie schreibe ich ein Program, welches Berechnungen ausführt und sagen wir einige Male pro Sekunde überprüft, ob der Benutzer etwas eingegeben hat. Ist noch nichts eingegeben worden, soll es mit den Berechnungen weiterfahren, ansonsten die Eingabe auswerten. Braucht es dafür Multithreading? Ich möchte, wenn es nicht unbedingt vonnöten ist, nicht Plattform-spezifischen Code verwenden.
-
Du kannst beide Varianten nehmen. Ohne Multithreading gehts auch gut. Du musst Dir halt ein paar strategische Stellen überlegen, wo dein Programm oft genug vorbei kommt. Dort stößt Du halt einmal das Abfrage der Benutzereingabe an.
Mit Multithreading ist es schon 'sauberer', d.h. Du entkoppelst die beiden Sachen und die Benutzereingabe reagiert u.U. (nicht unbedingt) besser. Allerdings wird der Rechenthread immernoch nachschauen müssen, ob er beendet wurde. Außerdem wird Multithreading tendenziell langsamer sein, da Synchronisationsarbeit mit dem anderen Thread anfällt.
Plattformunabhängig... dann solltest Du Dir mal boost oder ACE anschauen. Ich würd aber erstmal die Lösung ohne Multithreading versuchen.
-
TIMER???
-
~des schrieb:
Braucht es dafür Multithreading?
Nein. Die Lösung ohne Multithreading sind non-blocking Eingabefunktionen. Leider gibts dafür keine Standard Mittel.
Falls deine Implementation über conio.h verfügt, kannst du mal nach kbhit suchen. Ist aber, wie bereits gesagt, alles andere als Standard.
Ansonsten musst du auf eine entsprechende Lib oder gleich die BS spezifischen Funktionen zurückgreifen. Aber das müsstest du mit Multithreading auch.
-
Allgemein brauchst du kein multithreading.
Aber, wie groovemaster schon sagte, lässt sich das auch ohne nicht mit der standardbibliothek lösen. Ich denke, mit multithreading ists klarer. Sieh dir mal boost::thread an.
-
erstmals vielen Dank für eure Antworten
für Linux habe ich die select() Funktion zur "non-blocking" Abfrage gefunden:
http://unixhelp.ed.ac.uk/CGI/man-cgi?select+2gibt es diese auch für Windows?
-
also unter win ist mir select() bis jetzt nur bei der winsock-programmierung über den weg gelaufen...
-
Guck mal, ob du eine conio Implementierung auftreiben kannst, da gibts die Fuktion kbhit.