Solange sich der Thread auf Aufgaben beschränkt die Mittels Qt-Eigenen Klassen gelöst werden können stört das nicht weiter. Möchte man jedoch einen Thread basteln der eben nicht nur mit signals und slots auskommt ist man ohne Trickserei schnell am Ende.
Das musste ich schmerzlich feststellen als ich QExtSerial mit Timeout in einem Thread realisieren wollte. Für das Timeout brauchte ich einen Timer, der Timer aber eine EventLoop, die serielle Kommunikation muss jedoch gepollt werden was das Aufrufen von exec() nicht erlaubt.
Der Thread braucht eine EventLoop um mit einem QTimer was anfangen zu können, jedoch muss die Funktion zum Übertragen und Empfangen von Daten so oft wie möglich aufgerufen werden.
Die Koexistenz der unendlichen EventLoop sowie einer zweiten unendlichen Funktion sieht so aus:
Code: Alles auswählen
void MyThread::run()
{
QEventLoop el;
while(1){
funktion(); // Hier werden die Daten gelesen und geschrieben
// oder eine andere Aufgabe verrichtet, die nicht oder
// umständlich realisiert werden kann
el.processEvents(); // Events pollen
}
}