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

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退出完毕后销毁。这样就可以了。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题