ich habe mir eine Klasse zur Rs232-Kommunikation geschrieben, die 2 threads erstellt (jeweils 1x Transmit/Receive). Der Receive Thread wartet auf die Daten /0 Multiplexing mit select(...)). Der Transmit Thread sended sofort die Daten. Beide Threads sind mit Mutex'en abgesichert. Das klappt soweit auch ganz gut auf einem Character-Based User-Interface (Kommandozeilen). Allerdings bin ich bei QT neu und ich bin mir ueber die Implementierung nicht sicher, wie ich meine Klasse in QT mit einbauen kann. Hat jemand eine bahnbrechende Idee fuer mich?
generell ist das doch kein Problem. Bisher erzeugst Deine Kommunikationsstrukturen in Deiner main(), nun würdest es halt in einer GUI Struktur machen.
Das einfachste wäre, Du erzeugst Dir erstmal überhapt eine GUI Klasse die Du anzeigen lässt. Dann brauchst doch Deine Strukturen da nur mit reinpachen und fertig Wenn diese eh in eigenen Threads laufen blockierst auch die GUI net und es sollte alles ohne Probleme gehen.
ich will die daten die ich ueber die rs232 schnittstelle erhalte, auch darstellen... darum gehts mir. Das bedeutet, ich muss die empfangenden Daten an die GUI weiterleiten. Wie loese ich das am besten?
Zuletzt geändert von pepade am 9. Oktober 2008 10:45, insgesamt 1-mal geändert.
Dann erstelle in deiner GUI eine public Methode die einen String oder welche Daten Du auch immer hast empfangen kann und sende die Daten von Deiner Struktur an die GUI.
Am besten geht es wenn Du beide (also GUI und Deine Struktur) als dynamische Objekte anlegst und diese dann gegenseitig bekannt machst. Dann kann jeder auf jeden zugreifen, musste dann natürlich auch sichern.
Vielleicht stehe ich gerad auf dem Schlauch, aber das aendert nichts daran, dass ich nicht weiß, wann die Daten angekommen sind. Also meine Com Class weiß, wann Daten angekommen sind. Ich muss der GUI nur signalisieren, dass sie sich die Daten abholt. Die Bekanntmachung der Daten ist nicht das Problem. Ich will in der GUI auch nicht Pollen...Oder reden wir aneinander vorbei?!
Und wo ist dann das Problem die Daten einfach an die GUI zu schicken, wenn Du ja weißt wann Sie angekommen sind? Somit muss die GUI gar nix machen außer die Daten die Du ihr zuschickst just kurz nachdem Du sie erhalten hast. Oder?
Leg ne public Methode an in der Du deine Daten an die GUI übergibst von der COM aus. In der Methode schreibst die Daten dann halt in die Elemente die Du zur Anzeige nutzen willst...fertig. Nix pollen, nix warten...einfach schreiben wenn die Daten angekommen sind.
ah okay... aber neee, keine saubere loesung meines erachtens, denn der ReceiverThread soll die Gui nicht manipulieren. Der Receiver Thread soll lediglich die Daten entgegennehmen, decodieren und mehr nicht.
Was aber moeglich waere ist, dass ich bei den beiden Programmen ueber Sockets telefoniere... Waer auch einfach
Wenn du nicht pollen willst ?
Wenn du die daten nicht von der COM Klasse in die GUI pressen willst ?
was bleibt ueber ? Events villeicht ?
BTW, wenn du QT4 verwendest, werden Funktionen die ueber den SIGNAL SLOT Mechanismus entkoppelt (Threadtechnisch) ... und verwenden intern quasi auch events ....
Was ist so schlimm, wenn dei COM-Klasse die die Datenaufbereitet, die daten an die GUI schickt, wenn diese sich gaendert haben ?
Ist das problem mehr logischer oder eher technischer Natur ?