
除了规定,往根源说,再多的线程,实质上对于CPU来说,也是一件一件的处理,并不是我们凭空现象的同时处理。只是可以“智能”的处理一下当前迫切需要的数据,然后可以随时暂停,再去处理更加迫切御羡蚂的。如果2个线程同时处派贺理UI显示,一个线程正在用于和用户交互更新显示,另外一个线程就只能是等待状态,并不能完成我们所期望的同时刷新UI的期望。
所以,基本上大部分应用开发框架都限制更新、创建UI必须在主线程里完成,而逻辑运算可以匹出新线程去完成。
多线程,越方便越快捷也就越容易隐藏bug,多线程间数据同步很容易搞乱,互斥量、读写锁、信号、共享等等。想要多线程同步处理UI更新,你也要给伟大的框架开发程序员们一些时间呵呵……
我提供两种比较简单的解决方案创建一个Receiver的QObject, 该对象必须生存在你继承的线衡笑唯程中
要么给该对象升盯构造对应的信号, 然后与你主线程窗体进行Connect, 一般来说是Queue的Connection
然后在子线程只要Emit你所实现的信号即可
或者用postEvent来解决, 自定义一种咐培Event, 然后持有主线程窗体对象, 然后PostEvent给主线程窗体对象
其实也比较简单,在主线程中调用delete A(这里A是class A new出来的一个对象),然后在calss A的析构函数里执行乎穗如下代码:m_thread.requestInterruption()
m_thread.quit()
//m_thread.wait()
requestInterruption()按照字面意思是请求中断,这样就可以从阻塞的地方暂时跑出来,然后执行quit来结束腔局这个线程。注意,不要在后面使用wait(),这样的话也会再次伍顷让被阻塞。
这样的话,在程序退出时,虽然会提示程序异常结束,但是那个阻塞的子线程的确也结束掉了。所以,我将该方法命名为不优雅退出阻塞线程法。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)