项目场景:

QSerialPort的异常分析


问题描述:

QSerialPort的waitForReadyread()经常接收数据不全或者等待超时

UINT WINAPI RS232::AcceptThread(void*pVoid)
{RS232* pThis = (RS232*)pVoid;pThis->AcceptRun();//return 0;
}void RS232::AcceptRun()
{QByteArray rx_buf;if(m_SerialPort == nullptr)m_SerialPort = new QSerialPort;//connect(m_SerialPort,&QSerialPort::readyRead,this,&RS232::SlotAcceptData,Qt::QueuedConnection);m_ThreadRun = true;while(m_ThreadRun){if(m_AcceptType == AcceptType_Normal){if(m_SerialPort->waitForReadyRead(2000)){qApp->processEvents();while(true){rx_buf +=  m_SerialPort->readAll(); //读取串口接收的数据m_SerialPort->waitForReadyRead(50);if(rx_buf.endsWith("\r\n")||rx_buf.endsWith("\n"))break;}QString rx_buf_tmp = QString::fromLocal8Bit(rx_buf);    //转换为中文格式emit PrintRecevieData(rx_buf_tmp);IsReceiveData = true;rx_buf.clear();}}else if(m_AcceptType == AcceptType_Continuous){}Sleep(50);}
}

原因分析:

Qt机制的问题


解决方案:

循环里面一直waitForReadyRead()以重置,类要在线程里面new。

QSerialPort线程内接收异常相关推荐

  1. 如何使用Arthas定位线上 Dubbo 线程池满异常

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「Kirito的技术分享」 前言 本文是 ...

  2. Arthas | 定位线上 Dubbo 线程池满异常

    作者 | 徐靖峰  阿里云高级开发工程师 前言 Dubbo 线程池满异常应该是大多数 Dubbo 用户都遇到过的一个问题,本文以 Arthas 3.1.7 版本为例,介绍如何针对该异常进行诊断,主要使 ...

  3. 青铜9:防患未然-如何处理线程中的异常

    欢迎来到<并发王者课>,本文是该系列文章中的第9篇. 在本篇文章中,我将为你介绍线程中异常的处理方式以及uncaughtExceptionHandler用法. 一.新线程中的异常去哪了 应 ...

  4. java runnable 异常_JAVA 线程中的异常捕获

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...

  5. C#多线程开发-处理子线程中的异常

    C#多线程开发-处理子线程中的异常 在平时的多线程开发中,对于异常的处理是至关重要的,千万不能马虎.如果在实际的项目中,对于某些线程中的异常没有处理,会直接导致整个程序崩溃,软件无法使用. 其中需要说 ...

  6. 【C++基础】异常匹配与内建异常类

    目录 异常匹配 catch: 按异常类型匹配 为何要使用异常类 内建异常类 标准库中的异常基类 标准库中的异常类 例1:vector下标访问越界out_of_range异常 例2:内存分配失败bad_ ...

  7. 线程基础知识_Synchronized_ThreadAPI_自定义锁_获取线程运行时异常

    Synchronized synchronized包含monitor enter, monitor exit 2个JVM指令(遵循happens-before原则), 执行monitor exit之前 ...

  8. 线程池中线程抛了异常如何处理?

    文章目录 1. 模拟线程池抛异常 2. 如何获取和处理异常 方案一:使用 try -catch 方案二:使用Thread.setDefaultUncaughtExceptionHandler方法捕获异 ...

  9. C++ 抛出和接收异常的顺序

    代码编译运行环境:VS2017+Debug+Win32 异常(exception)是 C++ 引入的错误处理机制.它采用了统一的方式对程序的运行时错误进行处理,具有标准化.安全和高效的特点.C++ 为 ...

最新文章

  1. java单元测试覆盖率统计eclemma
  2. 线性直接变换方法对摄像机进行标定
  3. c++实现卷积码编码和维特比译码_鑫艾勒维特家用别墅电梯:安全至上,无可替代...
  4. 大厂面试:一个四年多经验程序员的BAT面经
  5. 查询表授权给谁了_SQL Server 全局临时表竞争条件漏洞利用
  6. python自动化办公 51cto_聊聊 Python 办公自动化之一 Excel
  7. 蓝桥杯集训之开训第一课
  8. 火狐扩展教程_Firefox扩展模板
  9. n986原生android,【极光ROM】-【三星NOTE20U(国行/港版/台版/韩版/美版) N986X-高通865P】-【V4.0 Android-R-UA3】...
  10. uva 10246(最短路变形)
  11. 【知乎解密(最新版-rpc版本)】
  12. win7系统查看硬盘序列号步骤
  13. Android APK瘦身优化
  14. Matlab 科研绘图汇总
  15. php-ews发送邮件,使用php-ews回复电子邮件
  16. 几款H桥电机驱动芯片直流有刷电机驱动芯片性能分析
  17. 小程序输入框设置maxlength时,拼音也会被限制
  18. PAT 甲级 1157 Anniversary
  19. 云服务器是一个个虚拟机,云服务器就是一个虚拟机吗
  20. 南卡和FIIL 哪个更好用?南卡和FIIL CC nano蓝牙耳机对比测评

热门文章

  1. 如何在C ++中使用String compare()?
  2. java金字塔程序_Java中的金字塔模式程序
  3. jQuery first()和last()函数示例
  4. odoo website_15专家使用的Website Builder软件
  5. Android Retrofit下载文件进度
  6. log4j.dtd_Eclipse log4j.xml –无法将log4j.dtd验证为XML定义
  7. gitbook安装与使用
  8. Java进阶必备,人人都能听懂的JVM
  9. 什么是系统架构?系统架构的特点分析!
  10. C# webservice 配置总结