hzp2022 2023-11-27 10:42 采纳率: 46.2%
浏览 17
已结题

QT多线程的一个问题

有没有专家解释一下为什么线程没有打印超时并且qt程序说Destroyed while thread is still running?

    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    timerthread thread1;
    thread1.start();
}


void timerthread::run()
{

    timer=new QTimer;
    timer->setInterval(1000);
    timer->start();
    connect(timer,&QTimer::timeout,this,[=]()
    {
        qDebug()<<"Timeout"<<endl;
    });


}


  • 写回答

3条回答 默认 最新

  • 波塞冬~ 2023-11-27 10:51
    关注

    1、Destroyed while thread is still running,是因为你程序退出的时候线程还没退出,所以异常报错。
    2、继承QThread的方式,当run函数结束的时候,线程也结束了。
    3、定时器在线程中申请,线程已经结束了,所以并不会打印Timeout,由于run结束,定时器超时的时候就报错。
    4、在第11行写一个死循环,不让线程退出,可以实现你要的一秒打印超时,但这并不是一段好的代码。
    解决你的问题,请点赞采纳,谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 创建了问题 11月27日