HouGISer 2019-06-20 14:02 采纳率: 0%
浏览 3729

Qt中一个类moveToThread后,线程结束后如何自动析构?

定义一个A类,集成QObject

class A : public QObject{
    Q_ObJECT
public:
    ~A(){
        qDebug()<<"~a";
    }
public slots:
    void start(){
        //耗时操作
        emit finish();
    }
signals:
    void finish();
}

在main函数中

A a = new A;
QThread t = new QThread(0);
a.moveToThread(t);
connect(t,&QThread::started,a,&A::start);
connect(a,&A::workFinished,t,&QThread::quit);
connect(t,&QThread::finished,t,&QObject::deleteLater);

这样的话,线程退出后,并没有打印出类A析构的信息。请问如何析构一个加到线程中的类?

  • 写回答

1条回答 默认 最新

  • Eyre Turing 2019-10-06 20:37
    关注
    A *a = new A;
    QThread *t = new QThread;
    a->moveToThread(t);
    connect(t, SIGNAL(started()), a, SLOT(start()));
    connect(a, SIGNAL(finish()), a, SLOT(deleteLater()));
    connect(a, SIGNAL(destroyed()), t, SLOT(quit()));
    connect(t, SIGNAL(finished()), t, SLOT(deleteLater()));
    

    a在销毁后是会发出destroyed()信号的,a完成后可以先让a销毁,然后a发出销毁的信号后t再退出,t退出完毕后销毁。这样就可以了。

    评论

报告相同问题?