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("information"))           
                   {                
                           rDataStr = rData;                
                           rData.clear();                
                           break;            
                    }            
                   else                
                         PVSleep::sleep(1000);        
             }    
      });    
      future.waitForFinished();    
      return rDataStr;
}
 
注:rData是成员变量,实时存储接收的返回消息。