zdhwhl的个人主页

http://www.qtcn.org/bbs/u/160992  [收藏] [复制]

zdhwhl

  • 0

    关注

  • 0

    粉丝

  • 2

    访客

  • 等级:新手上路
  • 总积分:2
  • 男,1996-03-30

最后登录:2022-08-15

更多资料

日志

求助:多线程应用,界面卡死

2019-01-21 19:26
1.描述:
主界面的一个按钮绑定的槽函数里,调用了如下函数。第一个参数是待发送的指令,第二个参数是发送命令后循环等待的毫秒数,我设置为等待60秒。
2.疑问:sendData发送指令后,我开启了子线程等待60秒,来接收指令返回。
为什么开启了子线程,主界面还会卡死?有什么解决办法?


3.代码:

QString &Worker::writeAndReadData(const QString&sData,int timeout)
{  

   rDataStr.clear();  

   rData.clear();    

   sendData(sData+"\r\n");    

   PVSleep::sleep(300);  

   QFuture<void> future = QtConcurrent::run([&]()  

   {        

       for(int i=0;i<timeout/1000;i++)

       {          

      if(rData.contains("Rebooting"))          

       {                

        rDataStr = rData;                

        rData.clear();              

       break;          

        }          

      else                

         PVSleep::sleep(1000);        

        }    

   });  

   future.waitForFinished();    

   return rDataStr;
}

分类:默认分类|回复:2|浏览:403|全站可见|转载
 

下一篇: 求助:Qt::Blockingqueuedconnection 死锁

上一篇:

 
删除

sng2008:PVSleep::sleep(300);    和 future.waitForFinished();    都在主线程中导致主线程卡死。正确的方法是将任务放在子线程中运行,完成后发送消息给主线程。

2019-01-30 09:31 -
删除

sng2008:PVSleep::sleep(300);    和 future.waitForFinished();    都在主线程中导致主线程卡死。正确的方法是将任务放在子线程中运行,完成后发送消息给主线程。

2019-01-30 09:31 -

Powered by phpwind v8.7 Certificate Copyright Time now is:04-20 17:30
©2005-2016 QTCN开发网 版权所有 Gzip disabled