Tengo una sencilla interfaz de usuario de forma que tiene una ranura para un botón, a partir de un hilo:QThread bloqueo principal aplicación
void MainWindow::LoadImage()
{
aThread->run();
}
Y el método run() es el siguiente:
void CameraThread::run()
{
qDebug("Staring Thread");
while(1)
{
qDebug("ping");
QThread::sleep(1);
}
}
Cuando Hago clic en el botón que llama a LoadImage(), la IU deja de responder. Periódicamente veo el mensaje "ping" como salida de depuración pero la UI se cuelga, no responde a nada. ¿Por qué mi hilo no se ejecuta por separado? CameraThread derivado como QThread público Estoy usando gcc versión 4.4.3 (Ubuntu 4.4.3-4ubuntu5) con las bibliotecas QT y QT Creator desde los repositorios de Ubuntu 10.04 (x86).
La documentación de QT explica el uso de QThread por subclases. ¿Por qué es eso una mala idea? –
@Atilla: si lees el enlace QT Blog en la respuesta de Casey, lo encontrarás titulado "Lo estás haciendo mal ...". Es una discusión sobre por qué la documentación de Qt sobre la subclasificación de QThread no era la forma correcta de hacer subprocesos.Además, si he leído la entrada del blog correctamente, es por la persona que escribió la documentación original de Qt. –
Sí, eso es correcto. Básicamente, la documentación de Qt es engañosa y, en consecuencia, ha llevado a muchas personas a hacer cosas hacky (como movetoThread (esto) en el constructor de Qthread) que causan problemas en el futuro. Esperemos que los documentos se actualizarán pronto. – Casey