QTcpSocket vs. Threads
Verfasst: 6. April 2010 11:59
Hi allerseits!
Vielleicht kann mir jemand folgendes erklären... bei den Qt Sockets ist vermerkt, dass sie nicht multi-threading fähig, nur reentrant sind.
Ich würde gerne einen neuen Thread erzeugen, der völlig asynchron zum Main-(GUI-)Thread die Kommunikationsarbeit übernimmt, also empfangene Nachrichten verarbeitet und Antworten verschickt. Der GUI-Thread müßte "lediglich" Zugriff auf den Status des Sockets haben um diesen anzuzeigen.
Jetzt frage ich mich viele verschiedene Dinge.
Wie schaffe ich es, die Klasse Multi-Threading fähig zu machen? Bzw. muss ich das überhaupt? Reicht vielleicht eine Kapselung über Queued-Connections?
Muss das Socket-Objekt vom Netzwerk-Thread erzeugt werden oder kann auch der Main-Thread das Socket-Objekt erzeugen und dem Netzwerk-Thread nur Zugriff zum Empfangen und Verchicken von TCP-Messages geben?
Kann ich so eine Socket-Klasse überhaupt multithreading-fähig machen? Ich könnte den QTcpSocket kapseln und alle von mir benutzten Funktionen mit einem Mutex verriegeln. Aber hilft mir das? Immerhin wird ja, ganz ausser meiner Kontrolle, irgendwo im Hintergrund mit dem Netzwerkadapter kommuniziert. Ist das nicht auch wieder ein anderer Thread? Würde diese Kommunikation nicht mit meinen Netzwerk-Thread konkurrieren?
Wenn ich einen eigenen Netzwerk-Thread benutze, kann ich wohl auf die non-blocking Methoden verzichten und die waitFor...() Methoden benutzen, oder hat das trotzdem Nachteile? Die GUI würde ja nicht mehr blockiert...
Ich habe schon gut funktionierende Threads in Qt geschrieben, aber bisher immer nur mit eigenen Datenverarbeitungsroutinen. Ich bin mir unklar, über die Auswirkungen der Verwendung von Objekten wie den QTcpScokets.
Wäre schön wenn mir jemand helfen könnte, meine Gedanken zu ordnen. Danke!!!
Vielleicht kann mir jemand folgendes erklären... bei den Qt Sockets ist vermerkt, dass sie nicht multi-threading fähig, nur reentrant sind.
Ich würde gerne einen neuen Thread erzeugen, der völlig asynchron zum Main-(GUI-)Thread die Kommunikationsarbeit übernimmt, also empfangene Nachrichten verarbeitet und Antworten verschickt. Der GUI-Thread müßte "lediglich" Zugriff auf den Status des Sockets haben um diesen anzuzeigen.
Jetzt frage ich mich viele verschiedene Dinge.
Wie schaffe ich es, die Klasse Multi-Threading fähig zu machen? Bzw. muss ich das überhaupt? Reicht vielleicht eine Kapselung über Queued-Connections?
Muss das Socket-Objekt vom Netzwerk-Thread erzeugt werden oder kann auch der Main-Thread das Socket-Objekt erzeugen und dem Netzwerk-Thread nur Zugriff zum Empfangen und Verchicken von TCP-Messages geben?
Kann ich so eine Socket-Klasse überhaupt multithreading-fähig machen? Ich könnte den QTcpSocket kapseln und alle von mir benutzten Funktionen mit einem Mutex verriegeln. Aber hilft mir das? Immerhin wird ja, ganz ausser meiner Kontrolle, irgendwo im Hintergrund mit dem Netzwerkadapter kommuniziert. Ist das nicht auch wieder ein anderer Thread? Würde diese Kommunikation nicht mit meinen Netzwerk-Thread konkurrieren?
Wenn ich einen eigenen Netzwerk-Thread benutze, kann ich wohl auf die non-blocking Methoden verzichten und die waitFor...() Methoden benutzen, oder hat das trotzdem Nachteile? Die GUI würde ja nicht mehr blockiert...
Ich habe schon gut funktionierende Threads in Qt geschrieben, aber bisher immer nur mit eigenen Datenverarbeitungsroutinen. Ich bin mir unklar, über die Auswirkungen der Verwendung von Objekten wie den QTcpScokets.
Wäre schön wenn mir jemand helfen könnte, meine Gedanken zu ordnen. Danke!!!