为什么在析构函数中调用qCritical或qDebug无法正常工作?

5
我有一个多线程应用程序,最初是使用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 的最新版本是否有更改影响它们的行为方式?

你能添加你的代码吗?如果你从cmd.exe运行应用程序,会发生同样的事情吗? - Samuel Harmer
@Styne666:我会尝试提取一个小的代码片段来重现这个问题。要发布的内容太多了。 - gnovice
1个回答

0
因为qDebug与QApplication交互,现在可能会有一部分被销毁掉了,然后才是应用程序的其他部分。可能是这样的。 不过,尝试手动销毁对象,然后再调用QApplication::exit()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接