串口-Qt使用多线程刷新界面,界面一段时间后不响应

问题描述

Qt使用多线程刷新界面,界面一段时间后不响应

我设计了一个串口工作线程和界面刷新主线程。
串口线程如下:
#include "thread.h"
#include "mainwindow.h"
#include
#include

Thread::Thread()
{
//初始化

}
Thread::~Thread()
{
mutex.lock();
abort = true;
mutex.unlock();

wait();

}//析构

void Thread::run() //这就是线程的具体工作了
{
// qint64 f=0;
int i;
int fd;
int nread=1;
//int nwrite
int count=0;//size of writed buff

fd=open("/dev/ttySAC1",O_RDONLY | O_NOCTTY);
set_speed(fd,115200);
if(set_Parity(fd,8,1,'N')==FALSEE)
{
    printf("Set Parity Errorn");
    exit (0);
}

while(!abort)
{
    qDebug()<<"r:"<<QThread::currentThreadId();

    nread=read(fd,buff1,1);
qDebug()<<"rea";
    if(nread>0)
    {
        buff[count]=buff1[0];
        count++;
    //            qDebug()<<count;
    }
    if(count==16)
    {
    dosomething;

        count=0;
        emit receiver16(nameflag,time,datas);
    msleep(85);
        nameflag=0;
    }
}
close(fd);

}

界面主线程:
#include "mainwindow.h"
#include
#include
#include

void MyMainWindow::paintEvent(QPaintEvent *)

//paintEvent函数由系统自动调用,用不着我们人为的去调用。
{
QPainter paint;//1024*768
paint.begin(this);

 /*画一大堆东西*/
 qDebug()<<"paint";
paint.end();

}
MyMainWindow::MyMainWindow(QWidget *parent)
:QWidget(parent)
{
setGeometry(0,0,1024,768);
ioread= new Thread;
timer = new QTimer;
timerPon= new QTimer;//总共4个定时器,但结构都是这样的
ioread->start(QThread::InheritPriority);
connect(ioread,SIGNAL(receiver16(int,char *,char *)),this,SLOT(display(int,char *,char *)));
connect(timer, SIGNAL(timeout()), this, SLOT(timerFunction()));
connect(timerPon, SIGNAL(timeout()), this, SLOT(timerFunctionPon()));

     //初始化;

}

void MyMainWindow::display(int nameflag,char *time,char *datas)
{
qDebug()<<"dis:"<<QThread::currentThreadId();

 DoSth……;
update();

}
void MyMainWindow::timerFunction()
{
cttimerDoSth;
}

void MyMainWindow::timerFunctionPon()
{
PonttimerDoSth;
}

运行了一段时间(一般是几个小时后)界面卡住不动了,定时器计时都不显示了,这是怎么回事啊?

时间: 2024-09-22 13:21:34

串口-Qt使用多线程刷新界面,界面一段时间后不响应的相关文章

程序运行一段时间后,界面不刷新 mfc

问题描述 程序运行一段时间后,界面不刷新 mfc 用vc2008做的程序,在自建的线程里,处理蓝牙虚拟串口通信的接收数据和实时显示! 发现程序跑40分钟左右后,界面变灰!但程序没死,数据通信显示正常.其他控件就没了.移动鼠标可以看到,也可以操作!感觉就是主界面不重绘了!如图: 程序运行时看任务管理器的内存,也不大!应该不是内存泄漏的问题 找不出原因了!网上用PeekMessage的方法试了,还是没用!谁能帮忙给个解答! 这个线程机制以前用串口通信和usb虚拟串口通信都是正常的,没出现过这个问题!

C#串口收发数据,子线程更新textbox控件内容,一段时间后,界面卡死,请教问题原因所在

问题描述 1.现象描述:我自己用C#做了一个模拟流量计软件,下位机大概每100ms会发送一些数据(8字节),我的软件接收后,响应一个9字节的数据.数据的接收和发送都在richtextbox中显示出来.我开了一个子线程,这个线程每100ms去更新textbox控件内容,(就是先读取textbox的内容,在此基础上递增一个常量,再显示在textbox中),程序能够正常运行一段时间,然后就出现了界面卡死的现象,串口能够正常收发,richtextbox中的日志数据能够正常打印,但就是主界面死掉了,点什么

串口通信-接受一段时间中断后出现不接收的情况

问题描述 接受一段时间中断后出现不接收的情况 最近写了一个下位机程序,惯导通过422口发送数据给下位机.波特率为38400,发送周期为1s但出现的问题是:有时候下位机运行一段时间后(有时候一小时,有时候一天),下位机不接收惯导的数据了,惯导对应的422口中断也完全不产生了,必须中控重启才行.后来我用串口调试助手调试,把惯导数据的发送周期改到500ms以下时,中控就会不到1min中就开始不接受数据.初步判定是由于程序效率较低的原因,请各位大神帮忙分析下,有什么好的解决方法. 解决方案 给你两点建议

使用Control.Invoke处理多线程应用程序界面

程序|多线程 使用Control.Invoke处理多线程应用程序界面 使用单一线程,在进行大计算量或耗时的操作时,会使界面失去响应.Control.Invoke 提供了一个在工作线程中更新见面的简单办法.该函数会把作为参数的回调函数提交给应用程序的界面进程(一般是主线程)的队列中,等待处理.这样,对界面的操作便无须担心同步.互锁等问题. 以下例子摘自一个局域网资源搜索程序        可以看到,线程池中的工作线程通过调用TreeView的Invoke方法,并提供一个回调函数,来实现对TreeV

阻塞-vb.net多线程造成窗体界面“假死”解决办法?

问题描述 vb.net多线程造成窗体界面"假死"解决办法? 我在一个窗体按钮单击事件里开了一个新线程用于连接一硬件设备,结果线程一start窗体就卡死了,造成窗体线程阻塞,我想知道时间片是如何分配的,默认优先级相同,为什新线程会独占时间片? 解决方案 我在编写MFC窗体程序时也测验过线程独占的情形,我猜想最可能的原因是:线程的开辟与管辖范围与主线程相干.

Ajax实现带有验证码的局部刷新登录界面_AJAX相关

现在的登录界面大多数都带有:验证码的功能+验证码局部刷新+ajax登录.用ajax登录的好处最明显就是速度快,URL地址没有变化.所有现在登录功能很少再用form表单post提交了,大多数都已经采用了ajax局部访问后台然后解析返回值并显示结果到界面上面.理论还是要拿来实践才能验证的,下面直接上代码. 运行界面: 1.验证码后台访问部分上一篇博客已经介绍多了,这里介绍如何利用img中src实现局部刷新验证码的功能. html部分: <p><label class="lbrigh

Ajax实现带有验证码的局部刷新登录界面

现在的登录界面大多数都带有:验证码的功能+验证码局部刷新+ajax登录.用ajax登录的好处最明显就是速度快,URL地址没有变化.所有现在登录功能很少再用form表单post提交了,大多数都已经采用了ajax局部访问后台然后解析返回值并显示结果到界面上面.理论还是要拿来实践才能验证的,下面直接上代码. 运行界面: 1.验证码后台访问部分上一篇博客已经介绍多了,这里介绍如何利用img中src实现局部刷新验证码的功能. html部分: <p><label class="lbrigh

设置Win8界面通知对话框显示时间

微软Win8提供了非常方便的"通知"提示功能,我们可以在屏幕右上方看到当前的应用更新提示或其他系统通知信息.有些朋友觉得Win8屏幕右上角的通知对话框显示时间较短,可能会而错过一些信息.我们可以通过设置修改Win8通知对话框的显示时间吗?方法其实很简单. 图示:Win8界面右上角的"通知"对话框 首先我们打开Windows 8的控制面板,选择"轻松使用". 图示:在Windows 8控制面板中选择"轻松使用" 在Win8&qu

开机卡在欢迎界面不动,强制关机后该怎么办

很多人在使用电脑的过程中,都遇到开机卡在欢迎界面不动,有时候人品好,强行关机完继续启动系统居然就可以启动了,但是有点时候启动完还是进不去.下面我们来了解一下开机卡在欢迎界面不动具体原因跟怎么办 ? 1 开机卡在欢迎界面不动的原因 : 1:开机启动项太多; 2:C盘里面文件太多,可用空间已经非常小了; 3:中毒中木马之类的; 4:软件冲突; 2 如果是出现在欢迎界面不动了,而重启一下又可以了 ,那么基本上是第一步中的1,2情况. 解决方法:手动清理下磁盘,通过360安全卫士把启动项适当的删掉一部分