从析构函数调用时,为什么qCritical或qDebug不起作用?

gno*_*ice 5 c++ debugging qt destructor qt-creator

我有一个多线程应用程序,我最初使用Qt 4.6和Qt Creator 2.2(或可能2.1)开发,最近我升级到Qt 4.7和Qt Creator 2.3(这都是在Windows中).我之前通过在析构函数中调用来测试应用程序中各种线程和对象的销毁顺序qCritical().它很容易证实事情正在按我预期的顺序被摧毁.

但是,在升级到较新版本后,我注意到消息并不总是显示在Qt Creator中的"应用程序输出"面板中.消息的顺序始终是正确的,但在某个随机点,输出才会停止显示.有时根本没有显示输出.不过,我可以确认对象正在被销毁,我的应用程序会毫无错误地退出.

当我qDebug()用来显示消息时,问题仍然存在,但是如果我改为使用简单的话,一切都会正常显示printf().在应用程序完成清理之前,应用程序输出停止的原因是什么?最新版本的Qt或Qt Creator是否会改变这些函数在析构函数内部调用时的行为方式?

小智 0

因为 qDebug 与 QApplication 交互,并且现在可能它的某些部分在应用程序的所有其他部分之前被销毁。或许。但是,请尝试手动销毁对象,然后再调用 QApplication::exit();