2016-05-05 11 views
1

Ich habe eine Software im QT-Framework (C++), die verarbeitete (lokale) Daten an andere Server weiterleiten und die gleichen (fremden) Daten auf anderen Servern verarbeiten und vergleichen soll .QTcpServer empfängt und sendet in einem anderen Thread

Problem tritt auf, wenn eine große Menge an lokalen Daten verarbeitet wird. Fremddaten werden gepuffert und erst nach dem Senden aller lokalen Daten in den Vergleichsprozess übernommen. Ich brauche die Daten in bestimmten Zeitrahmen verglichen werden, so dass dies eine Zeitüberschreitung verursacht.

Eine Idee war es, einen Thread zu verwenden, um lokale Daten und einen anderen Thread zu senden, um fremde Daten zu empfangen und zu vergleichen. QTcpServer wird wahrscheinlich einen Mutex benötigen, um ihn vor gleichzeitigem Lesen und Schreiben zu schützen.

Ist dies mit einer Verbindung möglich, oder wäre es besser, eine Verbindung für den Versand und eine für den Empfang in der QT-Umgebung zu haben?

überprüfte ich die Fortune-Server Beispiel http://doc.qt.io/qt-5/qtnetwork-threadedfortuneserver-example.html aber ich muss wissen, ob es möglich und sinnvoll ist verschiedene Threads für das Senden und Empfangen auf derselben Verbindung zu verwenden.

PS. Ich bin neu im Multithreading, also entschuldige ich mich, wenn ich einige Konzepte falsch verstanden habe.

+0

'QTcpConnection' kann nur in _one_ thread leben. Sie müssen _have_ in demselben Thread senden/empfangen. Das heißt, Sie müssen Daten nicht im selben Thread verarbeiten wie die Verbindung. Dies ist der Teil, der tatsächlich eine Weile dauern kann. –

Antwort

1

Ohne Code zu sehen, ist es schwierig, diese Frage definitiv zu beantworten. Dies könnte Sie jedoch auf die richtige Spur bringen ...

Ich würde nicht erwarten, dass Sie verschiedene Threads zum Senden/Empfangen von Daten benötigen würden; QTcpSocket ist asynchron.

Es klingt, als ob die Architektur, die Sie zur Verarbeitung der Daten verwenden, überarbeitet werden muss.

fremde Daten gepuffert und geht nicht in Vergleichsprozess, bis alle lokalen Daten

gesendet wird

, die wie eher ein Problem klingt und dem Bereich, in dem Multi-Threading von Vorteil wäre. Verwenden Sie also Multi-Threading für die Verarbeitung der Daten, anstatt die Kommunikation zwischen Servern zu steuern.

Da Sie angeben, dass Sie neu in Multithreading sind, empfehle ich, zunächst this article zu lesen und seine Beispiele als Vorlage zu verwenden.

Verwandte Themen