RS232-Klasse(read&write) mit Threading

Alles rund um die Programmierung mit Qt
Antworten
diddely
Beiträge: 49
Registriert: 9. Juli 2008 16:19

RS232-Klasse(read&write) mit Threading

Beitrag von diddely »

Hi,

ich habe mir (unter Windows) eine Klasse für die serielle Kommunikation geschrieben. Hierbei nutze ich WINAPI Funktionen, da ich overlapped IO benötige.
Diese Klasse enthält einfache write und read Methoden.

Mein Grundgedanke ist folgendermaßen:
Ich will einen Thread als Reader laufen lassen, der die ganze Zeit auf der Leitung pausenlos horscht.
Dann will ich einen Thread der bei Bedarf was auf die Leitung schreibt.

Beide Threads will ich durch Instanzierung der Serial-Klasse erzeugen.

Wie müsste nun meine run() Methode implementiert werden?
Thread 1 soll bei start anfangen zu lauschen
Thread 2 soll auf Schreib-Befehle warten und auf die Leitung schreiben.

In beiden Fällen würde ja die run() Methode gleich ausschauen, da es ja die selbe Klasse ist.

Oder muss ich für jeden Vorgang die run() neu implementieren?
Also quasi eine read und eine write-klasse?
Vermutlich nicht....wäre recht unpraktisch.


Was anderes:
Kann mir jemand sagen wie man ausser durch Instanzierung der Thread-Klasse Threads erzeugen kann?
Beispiel: Ich habe bereits eine Thread-Klasse instanziert und will in dieser Instanz noch weitere 5 Threads erzeugen.

Ein Codeausschnitt zu dieser Sache wäre für mich aussagekräftiger als Tausend Zeilen an Erklärung ;)


Danke!
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

Hier die lösung :wink:
Dateianhänge
serialthread.cpp
(5.47 KiB) 165-mal heruntergeladen
serialthread.h
(952 Bytes) 146-mal heruntergeladen
diddely
Beiträge: 49
Registriert: 9. Juli 2008 16:19

Beitrag von diddely »

danke, ich schaue es mir morgen mal an

Edit:
habs mir kurz angeschaut.
Soweit ich den Code richtig verstanden habe, erzeugst du mit diesem Code nur einen Reader Thread.

Ich würde gerne auch einen Writer Thread erzeugen, wobei der Reader Thread natürlich ununterbrochen weiter wartet...(overlapped IO)
Das was du da mit qextserialport hast ist non-overlapped IO.

Das Problem bei mir ist..ich wüsste zu gerne wie ich run() implementieren soll wenn meine thread-Klasse beide funktionalitäten beinhaltet. (Read und write-Eigenschaften)
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

genauso. du fügst noch einen bool member namens canWrite ein und fragst diese im run ab. per transmit msg übergibst du einen QByteArray der gesendet werden soll an den Thread und setz canWrite auf true. Ich dachte das könntest du dir aus der Struktur des read vorgangs ableiten.
Antworten