欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

qt 主线程等候子线程结束是界面不卡

更新时间: 2014-01-05 02:44:40 责任编辑: Author_N1

 

QT 主线程等待子线程结束是界面不卡
我现在主线程等待子线程结束才推出,如果阻塞等待肯定不行,请问有上面方法让界面不阻塞等待吗
--参考方法--
你在主线程里直接这么写代码调用
while(bIsExit)
{
   DoSomeThing();//这个函数运行一次可能需要10S时间
}
那DoSomeThing();还是跟主线程是在同一个线程啊,根本不是新建一个线程运行啊。肯定卡啦
--参考方法--
还有更 “高级”的方法

点击UI的退出按钮时,仅将子线程退出标志设为ture,别的什么都不用做。在子线程退出代码的最后发送给主线程一个事件,在主线程的事件循环中处理该事件的代码为真正的程序退出代码!

这样软件退出时的情况就是:点完退出按钮后,应用程序还是一切正常的,能使用的(可以在某个地方显示如:正在退出应用程序... 的提示文字),然后大约1~10s后,互查,应用程序真的退出了!


--参考方法--
不清楚你的子线程的实现方法,目前的Qt有几种方法,最传统的是继承后,重写run,如果是一个持续工作,就在run里边使用while循环,用一个flag表示退出条件。然后在flag=deactive的时候break;同时设置flag=shutdown.然后你吧线程的finish信号绑定到主程序的slot上。。。

第二种是run里边建立event loop exec(); ....

技术文档中的例子是把工作类和线程分开,然后moveToThread把工作类移入子线程地址空间。这个最好用。所有这些情况下都不会阻塞主线程。你在主线程中如果有个循环非常堵,建议在循环内使用
QCoreApplication::void processEvents ( QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents )
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:44:40
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/13894/
本文WWW.DOC100.NET DOC100.NET版权所有。