【发布时间】:2015-06-08 15:32:19
【问题描述】:
我已跟进 this link 创建工作线程(使用几乎相同的代码)。
我在代码末尾遇到一个错误,在工作人员完成并发出完成信号后执行清理。
如果我将线程和工作者声明为指针,则没有问题(就像链接一样)。但是如果我像下面这样声明它们,我的程序将在调用析构函数后崩溃!!
QThread thread1;
MyWorker mywork1;
mywork1.moveToThread(&thread1);
QObject::connect(&thread1, SIGNAL(started()), &mywork1, SLOT(process()) );
QObject::connect(&mywork1, SIGNAL(finished()), &thread1, SLOT(quit()));
QObject::connect(&mywork1, SIGNAL(finished()), &mywork1, SLOT(deleteLater()));//****
QObject::connect(&thread1, SIGNAL(finished()), &thread1, SLOT(deleteLater()));//****
问题是由标记为 //**** 的行引起的 报告的错误信息如下: 下级停止了,因为它收到了来自操作系统的信号。信号名称:SIGABRT 信号含义:中止
当然,如果我评论这些行,我的工人析构函数将不会被调用,也不会报告任何错误。错误背后的原因是什么?如何在不出错的情况下清理工作人员?
【问题讨论】:
标签: c++ multithreading qt