我现在主线程等待子线程结束才推出,如果阻塞等待肯定不行,请问有上面方法让界面不阻塞等待吗
多线程 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 )