qt开启线程界面假死问题解决

一、前言

在 使用qt高速读取传感器数据时,如果想要将数据实时刷新在界面,就需要开启一个线程单独去跑读取数据函数,并反馈给主程序,否则在主程序中读取和刷新界面会很卡很卡,但是在开启多线程,无外接鼠标键盘的linux环境下,发现一个问题,就是每个一段时间界面就假死,程序实际还在运行,指示界面卡住了,打印信息都正常,后来发现连接鼠标的话一动鼠标界面就恢复正常,但是也不会一直接着鼠标,卡死了就会认为真的死了,折腾了2天,累的我手指头只疼,终于解决这个问题了,发现问题的原因所在,这里发一个帖子记录一下,也希望能帮助到遇到此问题的朋友。

二、环境

宿主机:window10,Ubuntu16.04

目标及:a40i,linux3.10

三、正文

发生问题的原因是因为我在开启线程后,将读取数据程序放在run函数中一直跑,然后通过绑定槽函数的方式,将读取的数据传递给主程序,然后在主程序中刷新控件到界面显示,问题就是出现在这里,我直接在接收数据的槽函数中加入了控件刷新程序,就导致不定间隔时间,就将界面卡死,怀疑是有时刷新界面太快,倒是界面缓存溢出,系统无法做出及时响应,故进入一种故障模式,界面假死,但底层程序不受影响,仍然正常打印信息。

解决办法:将主程序中的接收线程槽函数中的刷新控件函数移出,放入到一个单独开启的定时器中,这个具体还得根据实际情况,有的人可能将控件刷新就放在槽函数中没有问题,可能是我这个硬件的问题,也算是暂时找到一种解决问题的办法,否者只能忍耐这主线程卡的状态去用了。

四、结语

手指头疼

猜你喜欢

转载自blog.csdn.net/qq_37603131/article/details/121644976