所以我一直在这个问题上停留了一段时间。出于某种原因,我的应用程序始终崩溃关闭,这是我得到的错误消息:Qt5应用程序在关闭时崩溃(QWidget :: show)
劣势停止,因为它引发了异常。异常在0x50c15a08,代码:
在线程0通过停止0000005:读访问冲突于:为0x0,标志=为0x0(第一次机会)
堆栈显示以下内容:
QWidget的::秀行:7030
而这正是我的main.cpp目前的样子:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
我不知道为什么崩溃正在发生。
稍微背景:这是一个多线程应用程序(同时使用QThread和QtConcurrent)。当线程未启动时,应用程序关闭就好了。因此,我增加了以下检查,以确保该线程被正确终止,但这并没有帮助:
void MainWindow::closeEvent(QCloseEvent *event)
{
if (thread->isRunning()) {
thread->terminate();
while(!thread->isFinished()){
}
event->accept();
}
}
编辑:如何在新线程创建
QThread *myThread = new QThread(this);
Worker *worker = new Worker(this, user, p);
worker->moveToThread(myThread);
connect(myThread, SIGNAL(started()), worker, SLOT(doWork()));
connect(worker, SIGNAL(workDone()), this, SLOT(deleteThread()));
myThread->start();
...和这是我在下载完成后如何处理删除线程:
void MainWindow::deleteThread(){
worker->deleteLater();
myThread->quit();
while(!myThread->isFinished()){
}
myThread->deleteLater();
}
你是否用有效的父母创建线程,以便Qt能够正确地处理它们? – Bowdzone 2014-11-05 06:58:44
这里'thread'的类型是什么?它是否继承'QThread'? – Nejat 2014-11-05 07:04:34
要一起回答@Bowdzone和@ Nejat的问题,是的线程确实有有效的父亲,并且它是从QThread继承的。 'QThread线程=新QThread(this)'这里'这是'MainWindow'类 – BurninatorDor 2014-11-05 14:21:27