2011-11-15 16 views
5

Tengo una aplicación de subprocesos múltiples que desarrollé originalmente usando Qt 4.6 y Qt Creator 2.2 (o posiblemente 2.1), y recientemente actualicé a Qt 4.7 y Qt Creator 2.3 (esto es todo en Windows). Anteriormente había estado probando el orden de destrucción de varios subprocesos y objetos en mi aplicación al realizar llamadas a qCritical() en los destructores. Se confirmó fácilmente que las cosas se estaban destruyendo en el orden que esperaba.¿Por qué no funcionaría qCritical o qDebug cuando se llama desde un destructor?

Sin embargo, después de actualizar a las versiones más nuevas, noté que los mensajes no siempre se muestran en el panel Salida de aplicaciones en Qt Creator. El orden de los mensajes siempre es correcto, pero en algún punto al azar, la salida simplemente deja de mostrarse. A veces, no se muestra ningún resultado. Sin embargo, puedo confirmar que los objetos están destruidos y mi aplicación se cierra sin error.

El problema todavía ocurre cuando uso qDebug() para mostrar mensajes, pero todo se muestra bien si en su lugar uso un simple printf(). ¿Cuál podría ser el motivo por el que la Salida de la Aplicación se detiene antes de que la aplicación complete su limpieza? ¿Hay cambios en las versiones más recientes de Qt o Qt Creator que alteran el comportamiento de estas funciones cuando se las llama desde dentro de un destructor?

+0

¿Puede agregar su código? ¿Ocurre lo mismo si ejecuta la aplicación desde cmd.exe? –

+0

@ Styne666: Trataré de extraer un pequeño segmento de código que reproduzca el problema. Hay demasiado para publicar como es. – gnovice

Respuesta

0

Porque qDebug interactúa con QApplication, y puede que ahora se destruya parte de este antes que cualquier otra parte de la aplicación. Tal vez. Sin embargo, intente destruir sus objetos manualmente, y solo entonces pida QApplication :: exit();

Cuestiones relacionadas