关闭 QCoreApplication 之前进行清理

2023-11-25

我有一个基于控制台的QCoreApplication它具有计时器并进行套接字通信,并且还使用锁定的互斥体。

当我手动关闭应用程序时,它会给出错误,指出某些互斥锁已锁定并且已超时。当用户关闭控制台应用程序时,有什么方法可以在控制台应用程序中进行清理吗?


清理工作应该由析构函数和子父关系来处理。

使您的主对象(主对象)成为 QApplication 的子对象,以便在 QApplication 之前将其及其所有子对象一起销毁。

你确定你杀死了所有的线程吗?如果它是一个带有事件循环的线程一定要调用QThread::quit()在调用之前退出事件循环QThread::wait()

您还可以使用空QApplication::qAddPostRoutine ( QtCleanUpFunction ptr )做一些特殊的清理工作。

要调试这些消息,您可以使用QtMsgHandler qInstallMsgHandler ( QtMsgHandler h )并编写您自己的消息处理程序来捕获这些警告。如果您可以模拟该问题,则可以在消息上设置断点并在堆栈上查看消息来自哪里。

void debugMessageHandler( QtMsgType type, const char *msg ){
    if(QString(msg).contains( "The message you can see in the console" )){
        int breakPointOnThisLine(0);    
    }

    switch ( type ) {
        case QtDebugMsg:
            fprintf( stderr, "Debug: %s\n", msg );
            break;
        case QtWarningMsg:
            fprintf( stderr, "Warning: %s\n", msg );
            break;
        case QtFatalMsg:
            fprintf( stderr, "Fatal: %s\n", msg );
            abort();
    }
}

为了使用析构函数和子父关系进行清理,您可以捕获控制台关闭信号并调用QCoreApplication::exit()到应用程序实例。

#include <csignal>
#include <QtCore/QCoreApplication>
using namespace std;

struct CleanExit{
    CleanExit() {
        signal(SIGINT, &CleanExit::exitQt);
        signal(SIGTERM, &CleanExit::exitQt);
        signal(SIGBREAK, &CleanExit::exitQt) ;
    }

    static void exitQt(int sig) {
        QCoreApplication::exit(0);
    }
};


int main(int argc, char *argv[])
{
    CleanExit cleanExit;
    QCoreApplication a(argc, argv);
    return a.exec();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关闭 QCoreApplication 之前进行清理 的相关文章

  • 调整 QML 图像显示尺寸

    我有一个带有嵌套的 QML 窗口RowLayout 在内排我有两个图像 来源 png这些图像的文件 故意 相当大 当我尝试设置height这些图像上的属性使它们变小 但它们仍然被画得很大 Desired Appearance Actual
  • setContextProperty 和对象的 setProperty 之间的区别

    我现在真的很困惑 有什么区别 QQmlApplicationEngine engine engine rootContext setContextProperty myObject userData and object gt setPro
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • QT 中只获取文件而不获取目录?

    当我这样做时 QDir myDir home some location QStringList filesList myDir entryList 它返回该位置内的文件和目录 但我只想要文件 并且这些文件可以具有任意扩展名 有任何想法吗
  • MAC 上的 QT/C++ - 未设置应用程序图标

    我正在努力解决的奇怪问题 在与我的 pro QT 项目文件相同的文件夹中 我有一个 Resources myIcon png 我试图将其设置为我构建的应用程序的图标 在 OSX 上运行 我阅读了文档 它建议在 pro 文件中添加 ICON
  • Qt程序部署到多平台,如何?

    我是 Qt 编程新手 我想开发一个程序 我想在 Windows Linux ubuntu 和 Mac 上运行 听说Qt支持多平台应用程序开发 但我的问题是 在我部署或编译后 任何 Qt 库都需要在 Ubuntu 中运行这个应用程序吗 如果您
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 如何在按下托盘图标菜单操作时执行功能?

    int main int argc char argv QApplication oApp argc argv QAction action1 QMenu menu QSystemTrayIcon TrayIcon QIcon favico
  • Qt中如何获取鼠标在屏幕上的位置?

    我想获取屏幕上的鼠标坐标 我怎样才能在 Qt 中做到这一点 在 Windows 上 使用 C 我正在做类似答案中建议的事情对于这个问题 https stackoverflow com q 11737665 1420197 正如文档所述 QC
  • 从布局中按名称获取小部件

    如果我想从 python Qt 的布局中获取特定的小部件 我应该如何进行 到目前为止我所做的 for i in range self ui horizontalLayout 14 count here it does fail name s
  • Qt 文件对话框默认后缀不起作用

    我将以下代码用于 QtQuick Dialogs 1 3 和 Qt 5 10 0 下 filedialog 的新属性 我使用 Qt Creator 5 10 默认套件构建它 import QtQuick 2 10 import QtQuic
  • 重定向 python 交互式帮助()

    我正在为使用 Qt 的应用程序开发交互式 python shell 但是我似乎无法获得重定向的交互式帮助 我的 python 代码中有这个 class OutputCatcher def init self self data def wr
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • 退出 Qt 程序的正确方法?

    我应该如何退出 Qt 程序 例如在加载数据文件时 发现文件损坏 并且用户需要退出该应用程序或重新启动数据文件 我是不是该 call exit EXIT FAILURE call QApplication quit call QCoreApp
  • Qt:测量事件处理时间

    我想测量我的应用程序中的哪些事件在主线程中需要很长时间才能执行 阻塞 GUI 或者至少是否有任何事件花费的时间超过 比如说 10 毫秒 显然 我对需要很长时间的任务使用线程和并发 但有时很难在其他线程中放入的内容和可以保留在 GUI 中的内
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • 调用 exit() 时是否运行析构函数? [复制]

    这个问题在这里已经有答案了 可能的重复 exit 或异常会阻止调用作用域结束析构函数吗 https stackoverflow com questions 2668075 will exit or an exception prevent
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • 如何以编程方式退出或关闭 Javascript UWP 应用程序? (Windows 10)

    我制作了一个游戏 它需要自己的退出按钮 我无法使用CoreApplication Exit https msdn microsoft com en us library windows apps windows applicationmod

随机推荐

  • 使用 TensorFlow 对图像中的点进行插值采样

    给定的是灰度图像I作为 2D 张量 维度 W H 和坐标张量C 暗淡 无 2 我想解释的行C作为坐标I 样本I在这些坐标上使用某种插值 双线性可能适合我的用例 并将结果值存储在新的张量中P 维度为无 即一维 条目数量为C有行 使用 Tens
  • Python 字典的底层哈希数据结构

    我正在构建一个非常大的字典 并且正在执行许多检查以查看键是否在结构中 然后添加它是否唯一或如果相同则增加计数器 Python 使用一个哈希数据结构存储字典 不要与加密哈希函数混淆 查找的时间复杂度为 O 1 但如果哈希表已满 则必须重新哈希
  • 如何在 Angular js 智能表中编辑内容

    我对java脚本很陌生 所以如果这看起来很基础 我必须道歉 如何使用 Angularjs 编辑 Smart Table 中的行表 似乎没有关于新智能表的教程 我想创建一个简单的表单 供用户输入特定地点的开放时间 我创建了可以在表上添加和删除
  • 线程“main”中出现异常 java.lang.UnsatisfiedLinkError:java.library.path 中没有 lwjgl

    我正在构建基本的 Slick 游戏示例 解释如下 http slick cokeandcode com wiki doku php id 01 a basic slick game 我遇到了一些问题 具体来说 游戏编译得很好 但当我尝试运行
  • 获取从本机 dll 到 C# 应用程序的结构数组

    我有一个 C NET 2 0 CF 项目 需要在本机 C DLL 中调用方法 此本机方法返回类型的数组TableEntry 当调用本机方法时 我不知道数组有多大 如何将表从本机 DLL 获取到 C 项目 下面是我现在所拥有的 in C NE
  • 找到用死 Groovy 代码填充 PermGen 的代码

    We have had our glassfish instance go down every two weeks for a while with a java lang OutOfMemoryError PermGen space I
  • Pyparsing - 令牌的顺序不可预测

    我希望能够从一段文本中提取字母的类型和数量 其中字母可以按任何顺序排列 我正在进行其他一些解析 但这一点让我难住了 input gt result abc gt a 1 b 1 c 1 bbbc gt b 3 c 1 cccaa gt a
  • 绕过 vba 函数中的最大字符串大小?

    vba 函数的字符串中可以使用的最大字符数为 255 我正在尝试运行这个函数 Var1 1 Var2 2 Var256 256 RunMacros Tims pet Robot Var1 Var2 Var256 Runat TimeValu
  • ASP.NET HttpApplication 生命周期

    Global asax cs 扩展的 HttpApplication 类是否在应用程序的生命周期中存在 什么时候可以创建 销毁实例 我遇到 application start 触发两次 这似乎与应用程序池回收和在此过程中发出请求有关 我还没
  • 如何使用 PHP 从日期中查找星期几的日期?

    如果我有一个 date YYYY mm dd并想要得到一个具体的 day 由 0 周日 至 6 周六 指定 YYYY mm dd is in 例如 如果我得到2012 10 11 as date and 5 as day 我想得到2012
  • 在纯 Perl 中从另一个 HTTP 资源进行流传输的最简单方法是什么?

    在 Perl 中从另一个 HTTP 资源进行流式传输的最简单方法 无需打开 shell 进行卷曲并从标准输入读取 是什么 我在这里假设我正在读取的 HTTP 资源是一个潜在的无限流 或者只是非常非常长 好的旧 LWP 允许您将结果作为流进行
  • graphviz - 固定节点位置

    我有一个由 neato 处理的图表 我正在向它添加新的边 但是 我不希望旧节点被移动 我希望 neato 计算新节点的新位置 并将旧节点保留在同一位置 strict graph node0 pos 1 2 node1 pos 2 3 我添加
  • 将方法参数传递给函数

    我很好奇这在 Go 中是否可行 我有一个具有多种方法的类型 是否可以有一个函数接受方法参数 然后为类型调用它 这是我想要的一个小例子 package main import fmt type Foo int func f Foo A fmt
  • Guice 和 Scala - 泛型依赖注入

    我正在尝试使用 Guice 创建通用特征的绑定 看看如何trait被定义为 trait Repository T See the trait执行 class DomainRepository extends Repository Domai
  • ES6 - 使用 getter 导出模块

    想要导出一个模块 该模块从某个全局对象中获取模块的定义 它是这样的 export get DynamicModule return globalFluxStorage state property property property pro
  • 如何在pytest中测试类的继承方法

    house py class House def is habitable self return True def is on the ground self return True conftest py import pytest f
  • 通过地址/指针访问对象

    我可以通过内存地址或指针访问当前 R 会话中创建的 data table 对象吗 library data table DT lt data table a 1 10 b letters 1 10 address DT 1 0x6bf9b9
  • PDO::ERRMODE_EXCEPTION 不会抑制警告

    http php net manual en pdo error handling php PDO ERRMODE WARNING 除了设置错误代码之外 PDO 还会发出传统的 E WARNING 消息 如果您只想在不中断应用程序流程的情况
  • 通用所有控制方法

    无法想到更好的标题 所以抱歉 我正在尝试转换这个方法 它将检索表单的所有子控件 作为扩展方法并接受接口作为输入 到目前为止我已经达到了 public IEnumerable
  • 关闭 QCoreApplication 之前进行清理

    我有一个基于控制台的QCoreApplication它具有计时器并进行套接字通信 并且还使用锁定的互斥体 当我手动关闭应用程序时 它会给出错误 指出某些互斥锁已锁定并且已超时 当用户关闭控制台应用程序时 有什么方法可以在控制台应用程序中进行