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

Why wouldn't qCritical or qDebug work when called from a destructor?

本文关键字:qDebug 不起作用 qCritical 析构 函数调用 为什么      更新时间:2023-10-16

我有一个多线程应用程序,我最初是使用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是否会改变这些函数在从析构函数内部调用时的行为?

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