为什么从析构函数调用时 qCritical 或 qDebug 不起作用?
Why wouldn't qCritical or qDebug work when called from a destructor?
我有一个多线程应用程序,我最初是使用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();
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- QT QDebug 与 QIODevice 不起作用
- 为什么从析构函数调用时 qCritical 或 qDebug 不起作用?