我正在编写一个基于多线程插件的应用程序。我不会成为插件作者。所以我希望避免主应用程序崩溃导致插件中的分段错误。是否可以?或者插件中的崩溃肯定也会影响主要应用程序状态?我使用 qt 编写了一个草图程序,因为我的“真实”应用程序强烈基于 qt 库。正如你所看到的,我强迫线程在未分配的 QString 上调用修剪函数时崩溃。信号处理程序被正确调用,但在线程被迫退出后,主应用程序也崩溃了。我做错什么了吗?或者就像我之前说的那样,我想做的事情是无法实现的?请注意,在这个简化版本的程序中,我避免使用插件,而只使用线程。引入插件将增加一个新的关键级别,我想。我想一步一步走下去。而且,总的来说,我想了解我的目标是否可行。非常感谢每个人都会尝试给我的任何帮助或建议。
#include <QString>
#include <QThread>
#include<csignal>
#include <QtGlobal>
#include <QtCore/QCoreApplication>
class MyThread : public QThread
{
public:
static void sigHand(int sig)
{
qDebug("Thread crashed");
QThread* th = QThread::currentThread();
th->exit(1);
}
MyThread(QObject * parent = 0)
:QThread(parent)
{
signal(SIGSEGV,sigHand);
}
~MyThread()
{
signal(SIGSEGV,SIG_DFL);
qDebug("Deleted thread, restored default signal handler");
}
void run()
{
QString* s;
s->trimmed();
qDebug("Should not reach this point");
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyThread th(&a);
th.run();
while (th.isRunning());
qDebug("Thread died but main application still on");
return a.exec();
}