作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个基于控制台的 QCoreApplication
它具有计时器并进行套接字通信并使用锁定的互斥锁。
当我手动关闭应用程序时,它给出错误,说某些互斥锁被锁定并且超时。当用户关闭控制台应用程序时,有什么方法可以在控制台应用程序中进行清理吗?
最佳答案
清理应该由析构函数和子父关系处理。
使您的主对象(主对象)成为 QApplication 的子对象,以便在 QApplication 之前将其与其所有子对象一起销毁。
你确定你杀了所有的线程?如果是带有事件循环的线程,请务必调用 QThread::quit()
在调用 QThread::wait()
之前退出事件循环
您也可以使用 void 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();
}
关于qt - 在关闭 QCoreApplication 之前清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/975655/
我是一名优秀的程序员,十分优秀!