Frage

Ich habe eine QThread, die von einem Socket liest und sendet ein Signal (QT-Signal), wenn es irgendwelche Daten zur Verfügung stehen. Dies wäre einfach, mit Lese Blockierung (2), aber ich brauche den Faden von außen stoppen zu können, ohne zu lange zu warten.

Wenn ich Pthread wurde unter Verwendung würde ich pselect und pthread_kill(thread_id, some_signal), aber QThread nicht scheint keine ähnlichen Methoden zu haben. Und das Hinzufügen einer dependcy auf Pthread zu diesem Projekt scheint nicht zu elegant.

Ich will auch nicht die anderen hässlichen Methoden verwenden, wie immer wieder versucht, aus der Steckdose mit einigen relativ kleinen Timeout zu lesen.

Edit: Die Buchsen sind nicht TCP, aber Bluetooth-L2CAP

.
War es hilfreich?

Lösung

Ein nicht zu elegant, aber einfach und Arbeitslösung: Erstellen Sie ein Rohr und lassen Sie wählen Warten auf entweder das Rohr oder meine Steckdose. Auf diese Weise kann ich durch das Schreiben etwas auf das Rohr die Wartezeit jederzeit stoppen.

Andere Tipps

Statt sich mit der sich Einfädeln Sie die asynchrone Schnittstelle von QTcpSocket verwenden können. Schauen Sie sich die Fortune-Client-Beispiel .

Sie können ein Signal an die terminate() Steckplatz Ihres QThread. Dies wird der Thread nach O Scheduling-Politik stoppen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top