QSerialPort线程内接收异常
项目场景:
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线程内接收异常相关推荐
- 如何使用Arthas定位线上 Dubbo 线程池满异常
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「Kirito的技术分享」 前言 本文是 ...
- Arthas | 定位线上 Dubbo 线程池满异常
作者 | 徐靖峰 阿里云高级开发工程师 前言 Dubbo 线程池满异常应该是大多数 Dubbo 用户都遇到过的一个问题,本文以 Arthas 3.1.7 版本为例,介绍如何针对该异常进行诊断,主要使 ...
- 青铜9:防患未然-如何处理线程中的异常
欢迎来到<并发王者课>,本文是该系列文章中的第9篇. 在本篇文章中,我将为你介绍线程中异常的处理方式以及uncaughtExceptionHandler用法. 一.新线程中的异常去哪了 应 ...
- java runnable 异常_JAVA 线程中的异常捕获
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...
- C#多线程开发-处理子线程中的异常
C#多线程开发-处理子线程中的异常 在平时的多线程开发中,对于异常的处理是至关重要的,千万不能马虎.如果在实际的项目中,对于某些线程中的异常没有处理,会直接导致整个程序崩溃,软件无法使用. 其中需要说 ...
- 【C++基础】异常匹配与内建异常类
目录 异常匹配 catch: 按异常类型匹配 为何要使用异常类 内建异常类 标准库中的异常基类 标准库中的异常类 例1:vector下标访问越界out_of_range异常 例2:内存分配失败bad_ ...
- 线程基础知识_Synchronized_ThreadAPI_自定义锁_获取线程运行时异常
Synchronized synchronized包含monitor enter, monitor exit 2个JVM指令(遵循happens-before原则), 执行monitor exit之前 ...
- 线程池中线程抛了异常如何处理?
文章目录 1. 模拟线程池抛异常 2. 如何获取和处理异常 方案一:使用 try -catch 方案二:使用Thread.setDefaultUncaughtExceptionHandler方法捕获异 ...
- C++ 抛出和接收异常的顺序
代码编译运行环境:VS2017+Debug+Win32 异常(exception)是 C++ 引入的错误处理机制.它采用了统一的方式对程序的运行时错误进行处理,具有标准化.安全和高效的特点.C++ 为 ...
最新文章
- java单元测试覆盖率统计eclemma
- 线性直接变换方法对摄像机进行标定
- c++实现卷积码编码和维特比译码_鑫艾勒维特家用别墅电梯:安全至上,无可替代...
- 大厂面试:一个四年多经验程序员的BAT面经
- 查询表授权给谁了_SQL Server 全局临时表竞争条件漏洞利用
- python自动化办公 51cto_聊聊 Python 办公自动化之一 Excel
- 蓝桥杯集训之开训第一课
- 火狐扩展教程_Firefox扩展模板
- n986原生android,【极光ROM】-【三星NOTE20U(国行/港版/台版/韩版/美版) N986X-高通865P】-【V4.0 Android-R-UA3】...
- uva 10246(最短路变形)
- 【知乎解密(最新版-rpc版本)】
- win7系统查看硬盘序列号步骤
- Android APK瘦身优化
- Matlab 科研绘图汇总
- php-ews发送邮件,使用php-ews回复电子邮件
- 几款H桥电机驱动芯片直流有刷电机驱动芯片性能分析
- 小程序输入框设置maxlength时,拼音也会被限制
- PAT 甲级 1157 Anniversary
- 云服务器是一个个虚拟机,云服务器就是一个虚拟机吗
- 南卡和FIIL 哪个更好用?南卡和FIIL CC nano蓝牙耳机对比测评
热门文章
- 如何在C ++中使用String compare()?
- java金字塔程序_Java中的金字塔模式程序
- jQuery first()和last()函数示例
- odoo website_15专家使用的Website Builder软件
- Android Retrofit下载文件进度
- log4j.dtd_Eclipse log4j.xml –无法将log4j.dtd验证为XML定义
- gitbook安装与使用
- Java进阶必备,人人都能听懂的JVM
- 什么是系统架构?系统架构的特点分析!
- C# webservice 配置总结