Cirfe 2015-09-15 02:12 采纳率: 50%
浏览 7143

QThread连接finished信号和deleteLater函数出错

MyThread继承QThread,并实例化一个MyThread对象m.连接m的finished信号和deleteLater信号。

connect(m,SIGNAL(finished()),m,SLOT(deleteLater));

但是当我调用m->terminate();函数时,程序会崩溃。

如果采用队列连接的方式
connect(m,SIGNAL(finished()),m,SLOT(deleteLater),Qt::QueuedConnection);

这样就不会出错。

哪位大神知道这是为什么

  • 写回答

2条回答 默认 最新

  • oyljerry 2015-09-15 03:01
    关注
     /! put the following code in constructor
    QThread *thread = new QThread;
    //! type of m_weakThread is QWeakPointer<QThread>
    m_weakThread = thread;
    Worker *worker = new Worker;
    //! type of m_weakWorker is QWeakPointer<Worker>
    m_weakWorker = worker;
    worker->moveToThread(thread);
    connect(worker, SIGNAL(error(QString)), this, SLOT(errorString(QString)));
    connect(thread, SIGNAL(started()), worker, SLOT(process()));
    connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
    //! instead of finished() signal, connect destroyed() signal to thread's quit() slot
    connect(worker, SIGNAL(destroyed()), thread, SLOT(quit()));
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
    thread->start();
    
    //! put the following code in destructor
    if (!m_weakThread.isNull()) {
        QThread *thread = m_weakThread.data();
        if (thread->isRunning()) {
            thread->quit();
            thread->wait();
        }
    }
    if (!m_weakWorker.isNull()) {
        Worker *worker = m_weakWorker.data();
        m_weakWorker.clear();   //! optional, a little optimization
        //! it's safe to release worker since the secondary thread exits
        delete worker;
    }
    if (!m_weakThread.isNull()) {
        QThread *thread = m_weakThread.data();
        m_weakThread.clear();
        //! it's safe to release thread since it exits and all objects in it has released
        delete thread;
    }
    

    先看看你出错的地方,分析一下

    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型