QT多线程对槽函数相应的影响destroyed信号

话不多说,直接上干货。
通过moveToThread创建的线程。QThread 对象居然必须要动态创建,不然释放的时候destroyed信号所自定义的槽函数不会响应。至今还没搞懂为什么。留个记录以后再探索

 

//worker 头文件
class worker :
    public QObject
{
    Q_OBJECT
public:
    worker();
    ~worker();
    void setFlag(bool Flag=true);
public slots:
    //线程运行函数!!!!
    void ThreadAutoRun1();
    //线程函数是否开始
    void StartThread();
    //线程函数是否结束
    void StopThread();
private:
    bool isStop;
};
//worker CPP文件

worker::~worker()
{

}
void worker::ThreadAutoRun1()
{
    while (FALSE==isStop)
    {
        qApp->processEvents();
        //自动运行流程!!!!!
        //QThread::msleep(1000);
    }

}

void worker::StartThread()
{

}

//线程函数是否结束!
void worker::StopThread()
{

}

void worker::setFlag(bool Flag)
{
    isStop=Flag;
}

//主对话框头文件
    //线程对象
    QThread *ThreadAuto;
    //线程函数对象
    worker *Mworker;
signals:
    void ToThreadAuto();


//主对话框CPP文件

    ThreadAuto = new QThread(this);
    Mworker = new worker;
    Mworker->moveToThread(ThreadAuto);
    connect(this, &HalconQt3::ToThreadAuto, Mworker, &worker::ThreadAutoRun1);
    bool dsada = connect(this, &HalconQt3::destroyed, this, &HalconQt3::DealClose22);//窗口销毁

    if (FALSE == ThreadAuto->isRunning())//如果线程未运行。则启动线程!!!!
    {
        Mworker->setFlag(FALSE);
        ThreadAuto->start();
        emit ToThreadAuto();
    }



void HalconQt3::DealClose22()
{
    if (TRUE == ThreadAuto->isRunning())
    {
        Mworker->setFlag(TRUE);
        ThreadAuto->quit();
        ThreadAuto->wait();
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值