Qthreadd run后台进行计算,前端更新进度条和界面子线程不能正确退出和重新启动

//线程处理函数
void MyThread::run()
{
    isPause=true;
    int i=0;
    int n=0;
    //    bool ret=true;
   qDebug()<<"isStop:"<<isStop;
    while(false==isStop)
    {
        qDebug()<<"循环开始1";
        mutex.lock();
         qDebug()<<"循环开始2";
        i++;
        qDebug()<<i;
        this->msleep(50);
        this->sum+=i;
        emit updateProgress(n,i);
        qDebug()<<"子线程号:"<<QThread::currentThread();
//        if(i==n && i>0)
//        {
//            i=0;
//        }
        mutex.unlock();
        qDebug()<<"退出循环1";
    }
   // mutex.lock();
    qDebug()<<"退出循环2";
}


//开始按钮
void Widget::on_btnStart_clicked()
{
    if(myT->isRunning()==true &&  myT->isStop==false)
    {
        return;
    }

    qDebug()<<"线程开始";
    ui->btnPause->setEnabled(true);
    ui->btnResume->setEnabled(true);
    ui->btnStop->setEnabled(true);
    myT->isStop=false;
    myT->start();

}

//停止按钮
void Widget::on_btnStop_clicked()
{
    if(myT->isRunning()==false && myT->isStop==true)
    {
        return;
    }

    //停止线程
    myT->pause();//暂停线程
    //ui->lineEdit->clear();
    qDebug() << "开始关闭线程";
    //myT->quit();//停止线程
   // myT->wait();//等待线程处理完手头工作
    myT->isStop=true;

}

第二次点开始的时候,我发现就执行到循环1那句,后面都没执行,然后退出每次都卡死零,没有关闭线程

调试一下停止按钮,看变量状态值对不对,第二次打开应该是恢复resume,而不是启动。

你这里使用了线程锁,停止貌似会出现一些不可预料的问题。。。

直接结束线程试试:
/* - 推荐使用 - */
// 停止线程
thread->quit();
// 等待线程处理完当前工作
thread->wait();

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632