QT线程QThread多次调用start()函数出现第2次调用失败问题备忘

        QT的线程创建和使用都非常方便,其中一种方法就是直接继承QThread类,重写run()方法即可实现将任务置于线程中执行。之前使用一直没有问题,前段时间在使用的过程中遇到一种情况:需要多次传递不同的参数调用start()函数,让线程中的任务重复执行,多次调用是依次进行的,因此我仅创建了一个线程对象。每次run()运行完以后,直接传递新的参数,让该线程重新执行run()里面的任务函数。

        此时出现了一个问题:第一次调用start()函数,并且run()函数中的任务执行完以后,我传递参数重新调用start()函数时,第2次调用该线程并没有正常启动并执行。而且,从代码单步进度来看run()函数已经执行完毕。产生该问题的主要原因是:同一个线程对象的start()若同一时间被调用多次,若第1次线程调用线程还未退出的情况下,则第2~N次被QT自动给拦截了。线程的退出不能以run()函数执行完毕为判断条件,得以线程的isFinished()函数作为判断条件。

        QThread*      pThread = new QThread(this);

        pThread->start();     // 第一次调用,正常启动线程函数

        pThread->start();    //  在第一次调用线程还未结束条件下,直接第二次调用,则本次调用失效

       再次调用QThread的start()函数之前,一定要经过判断该线程已经结束运行了。

 

  while (m_thread->isFinished() == false)
  {
    QThread::sleep(
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值