ich eine einfache Form UI haben, die einen Steckplatz für eine Taste hat, beginnen einen Thread:QThread Blockierung Haupt
void MainWindow::LoadImage()
{
aThread->run();
}
Und die Methode run() sieht wie folgt aus:
void CameraThread::run()
{
qDebug("Staring Thread");
while(1)
{
qDebug("ping");
QThread::sleep(1);
}
}
Wenn Ich klicke auf die Schaltfläche, die LoadImage() aufruft, die Benutzeroberfläche reagiert nicht mehr. Ich sehe regelmäßig die "Ping" Nachricht als Debug-Ausgabe, aber die UI hängt, reagiert auf nichts. Warum wird mein Thread nicht separat ausgeführt? CameraThread abgeleitet als öffentliche QThread Ich benutze gcc Version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) mit QT-Bibliotheken und QT Creator von Ubuntu 10.04 (x86) Repositories.
Die QT-Dokumentation erläutert die Verwendung von QThread durch Unterklassen. Warum ist das eine schlechte Idee? –
@Atilla - wenn Sie QT Blog Link in Caseys Antwort lesen, finden Sie es mit dem Titel "Sie tun es falsch ...". Es ist eine Diskussion darüber, warum die Dokumentation von Qt über das Unterklassen von QThread nicht die richtige Vorgehensweise für Threads ist.Wenn ich den Blogeintrag richtig gelesen habe, ist es auch die Person, die die ursprüngliche Qt-Dokumentation geschrieben hat. –
Ja, das stimmt. Grundsätzlich ist die Qt-Dokumentation irreführend und hat viele Leute dazu gebracht, Hacky-Dinge zu machen (wie movetoThread (this) im Qthread-Konstruktor), die Probleme auf der ganzen Linie verursachen. Hoffentlich wird die Dokumentation in Kürze aktualisiert werden. – Casey