boost ASIO TCP Client in eigenem Thread
-
Hallo Proggers,
ich habe folgendes Problem:
In einer Klasse lese ich die serielle Schnittstelle des Rechners aus und warte bis \r gelesen wird.
Dazu benutze ich schon ASIO (async_read_until).
Ich habe die Klasse instanziert und in einem eigenen Thread laufen. io_system() läuft ebenfalls in diesem Thread.
Die Daten kommen an und werden richtig eingelesen und bereit gestellt.Ich möchte einen TCP client erstellen, der, wenn Daten aus der seriellen Schnittstelle gelesen werden an einen Server sendet.
resolve -> connect -> write -> close (von mir aus auch async)Ich habe mir auch schon testweise einen ASIO TCP Client gebastelt, dessen Funktion prinzipiell erfüllt ist, also Daten kommen am Server an.
Mir ist nur noch nicht klar, wie erstelle ich eine abstrakte Klasse für einen TCP Client, lasse diesen in einem extra Thread laufen und warte von anderen Funktionen oder Threads auf Daten, die ich dann senden kann.
Sprich der TCP Client soll in einem eigenen Task laufen.
Andere Objekte sollen Daten an diesen Task schicken, der diese Daten dann wieder an den Server per Netzwerk senden.
Wie bekomme ich das in den Griff, dass mehrer Objekte diesem einen Task Daten zum senden zukommen lassen.Vielleicht hat ja schon jemand so was benötigt.
-
Wenn er Dir darum geht, mehrere Threads zu haben, erstelle zusätzliche
io_services und lasse derenrunMethode in unterschiedlichen Threads laufen.Ansonsten solltest Du etwas konkreter werden. Worum geht es Dir genau? Vielleicht auch etwas Code.
-
Was spricht dagegen einen Thread zu haben, auf welchem die serielle UND die netzwerk Kommunikation ablaufen? Mit den async_* Methoden geht das ja prima.
-
Danke für die schnellen Antworten.
Code kann ich momentan ich nicht liefern, weil ich mein Notebook nicht hier habe.
Das Problem ist folgendes.
task1(V24)
v24* v24_=new v24 ... (hier wird Initialisiert und serielle Schnittstelle gebildet, io_service wird hier übergeben)
v24_->setv24 ... - (baudrate, ...)
v24_->readv24 ... (hier wird async_read_until aufgerufen -> handler in Klasse definiert)
io_service(run)
hier habe ich den eingelesen CodeIch möchte einen 2. Task erstellen,
der wartet, bis ich ihm die Daten aus task 1 geben kann.
Dieser soll die Daten dann per TCP zu einem Server schicken.Ich möchte diese TCP Client geschichte als Klasse abstrakt anlegen und im Task2 instanzieren.
Hintergrund ist der, dass ich noch ein paar andere Tasks bekommen werde.
Der TCP task soll auf Daten warten und wenn welche da sind an den Server schicken.Aber wie kann ich von unterschiedlichen Stellen im Programm (aus Taks1 und Task x) die Daten in den TCP-Thread bringen.
Also den socket würde ich an einer Stelle im Programm öffnen und die Daten kämen von mehreren Stellen.??? - schwer zu beschreiben