标题:求助:多线程应用,界面卡死
作者:zdhwhl
日期:2019-01-21 19:34
内容:
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 future = QtConcurrent::run([&]()
{
for(int i=0;i
#1 [automoblie0 01-22 13:42]
future.waitForFinished();去掉即可。
但这个做法得保持函数未被回收。这个线程办法不建议使用。
#2 [小韩老师 01-22 20:57]
简单的做法是在Worker中定义一个信号比如finished(),在里边发送信号
QFuture future = QtConcurrent::run([&]()
{
for(int i=0;i
#3 [zdhwhl 01-23 16:21]
感谢上面两位朋友。
问题已解决。
总结:
1.开启线程后不再等待线程结束,函数直接返回;
2.子线程中有符合条件的结果时,把结果用信号发出去