Je simple interface de formulaire qui a une fente pour un bouton, à partir d'un fil: méthodeQThread bloquant l'application principale
void MainWindow::LoadImage()
{
aThread->run();
}
Et la course() ressemble à ceci:
void CameraThread::run()
{
qDebug("Staring Thread");
while(1)
{
qDebug("ping");
QThread::sleep(1);
}
}
Lorsque Je clique sur le bouton qui appelle LoadImage(), l'interface utilisateur ne répond plus. Je vois périodiquement le message "ping" comme la sortie de débogage, mais l'interface utilisateur se bloque, ne répond à rien. Pourquoi mon thread ne fonctionne pas séparément? CameraThread dérivé comme public QThread J'utilise gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) avec les librairies QT et QT Creator depuis les dépôts Ubuntu 10.04 (x86).
La documentation QT explique l'utilisation de QThread par sous-classe. Pourquoi est-ce une mauvaise idée? –
@Atilla - si vous lisez le lien Blog QT dans la réponse de Casey, vous le trouverez intitulé "Vous vous trompez ...". Il s'agit d'une discussion sur la raison pour laquelle la documentation de Qt sur le sous-classement de QThread n'était pas la bonne façon de faire des threads.En outre, si j'ai lu correctement l'entrée de blog, c'est par la personne qui a écrit la documentation originale de Qt. –
Oui, c'est correct. Fondamentalement, la documentation de Qt est trompeuse et par conséquent a conduit beaucoup de gens à faire des choses hacky (comme movetoThread (this) dans le constructeur Qthread) qui causent des problèmes sur toute la ligne. Espérons que les documents seront mis à jour bientôt. – Casey