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是成员变量,实时存储接收的返回消息。