CSerialPort串口类最新修正版(解决关闭死锁问题)2011-11-06
Remon提供的串口类原帖网址为:http://codeguru.earthweb.com/network/serialport.shtml, 原文的问答部分罗列出来这么多年来的问题,经过网友们的总结归纳,补充和修改原来代码后,整理出一份相对比较完美的代码。
这是一份优秀的类文件,好多的地方值得我们学习,具体在多线程,事件,自定义消息,类的封装方面等等。
本文附带一份小项目的源代码,它超越了串口助手,给人一种耳目一新的感觉。亮点如下:
1. 它解决了串口关闭时出现线程出现死锁,软件关闭后,进程在后台没有关闭问题(所谓的线程死锁),可以直接用到开发的项目上。
2. 并且是扩展了的串口助手,具有通信协议编辑和使用功能,
3. 软件升级检测,值得做软件升级例子使用。
4. 最重要的是源代码很不错,很值得大家去研究。
分享给需要的朋友们,有问题,可以在留言,以便做进一步修正。
详情参见:
http://blog.csdn.net/liquanhai/article/details/6941574
相关推荐
解决了关闭死锁的CSerialPort类项目
一份小项目的源代码,它超越了串口助手,给人一种耳目一新的感觉。亮点如下: 1.它解决了,串口关闭时出现死锁不响应问题,可以直接用到开发的项目上。 2.并且是扩展了的串口助手,具有通信协议编辑和使用功能, 3.软件升级检测,值得做软件升级例子使用。 4.最重要的是源代码很不错,很值得大家去研究。 分享给做工控上位机的朋友们,有问题,可以留言,以便做进一步修正。
CSerialPort类
改进的CSerialPort类,解决了关闭端口时的死锁问题,并对源码进行详细讲解,附有实例。
CSerialPort串口类最新修正版2016-05-07
CSerialPort =========== First Version by Remon Spekreijse on 2000-02-08 http://www.codeguru.com/cpp/i-n/network/serialcommunications/article.php/c2483/A-communication-class-for-serial-port.htm Second Version by mrlong on 2007-12-25 https://code.google.com/p/mycom/ * 增加 ClosePort * 增加 WriteToPort 两个方法 * 增加 SendData 与 RecvData 方法 by liquanhai on 2011-11-04 http://blog.csdn.net/liquanhai/article/details/4955253 * 增加 ClosePort 中交出控制权,防止死锁问题 by liquanhai on 2011-11-06 http://blog.csdn.net/liquanhai/article/details/6941574 * 增加 ReceiveChar 中防止线程死锁 by viruscamp on 2013-12-04 https://github.com/viruscamp/CSerialPort * 增加 IsOpen 判断是否打开 * 修正 InitPort 中 parity Odd Even 参数取值错误 * 修改 InitPort 中 portnr 取值范围,portnr>9 时特殊处理 * 取消对 MFC 的依赖,使用 HWND 替代 CWnd,使用 win32 thread 函数而不是 MFC 的 * 增加用户消息编号自定义,方法来自 CnComm by itas109 on 2014-01-10 http://blog.csdn.net/itas109/article/details/18358297 * 解决COM10以上端口无法显示的问题 * 扩展可选择端口,最大值MaxSerialPortNum可以自定义 * 添加QueryKey()和Hkey2ComboBox两个方法,用于自动查询当前有效的串口号。 by liquanhai on 2014-12-18 * 增加一些处理措施,主要是对减少CPU占用率 by itas109 on 2016-05-07 http://blog.csdn.net/itas109 * 修复每次打开串口发送一次,当串口无应答时,需要关闭再打开或者接收完数据才能发送的问题。 解决办法:在m_hEventArray中调整m_hWriteEvent的优先级高于读的优先级。CommThread(LPVOID pParam)函数中读写的位置也调换。 参考:http://zhidao.baidu.com/link?url=RSrbPcfTZRULFFd2ziHZPBwnoXv1iCSu_Nmycb_yEw1mklT8gkoNZAkWpl3UDhk8L35DtRPo5VV5kEGpOx-Gea * 修复停止位在头文件中定义成1导致SetCommState报错的问题,应为1对应的停止位是1.5。UINT stopsbits = ONESTOPBIT * switch(stopbits)和switch(parity)增加默认情况,增强程序健壮性 博客:blog.csdn.net/itas109 Email:itas109@qq.com
CSerialPort串口类更新版2014-01-10
** ** PURPOSE This class can read, write and watch one serial port. ** It sends messages to its owner when something happends on the port ** The class creates a thread for reading and writing so the main ** program is not blocked. ** ** CREATION DATE 15-09-1997 ** LAST MODIFICATION 12-11-1997 ** ** AUTHOR Remon Spekreijse ** ** ************************************************************************************ ** author: mrlong date:2007-12-25 ** ** 改进 ** 1) 增加ClosePort ** 2) 增加 writetoProt() 两个方法 ** 3) 增加 SendData 与 RecvData 方法 ** ************************************************************************************ ** author:liquanhai date:2011-11-04 ** 改进 ** 1)增加 ClosePort中交出控制权,防止死锁问题 ** 2) 增加 ReceiveChar中防止线程死锁 *************************************************************************************** ** author: itas109 date:2014-01-10 ** Blog:blog.csdn.net/itas109 ** ** 改进 ** 1) 解决COM10以上端口无法显示的问题 ** 2) 扩展可选择端口,最大值MaxSerialPortNum可以自定义 ** 3) 添加QueryKey()和Hkey2ComboBox两个方法,用于自动查询当前有效的串口号 ** 博客:blog.csdn.net/itas109 Email:itas109@qq.com
解决了关闭串口时死锁的CSerialPort类
该文章转载自:http://blog.csdn.NET/itas109 与2016-12-20日在其基础上修改了其中关串口卡死现象,添加十六进制与ASCII之间互转函数,觉得蛮好用的推荐给大家 如需转载请标明原始出处:http://blog.csdn.NET/itas109 QQ技术交流群:129518033 这是一份优秀的类文件,好多的地方值得我们学习,具体在多线程,事件,自定义消息,类的封装方面等等。 Remon提供的串口类网址为: http://codeguru.earthweb.com/network/serialport.shtml, 其他贡献者:http://blog.csdn.net/liquanhai/article/details/6941574 代码下载:http://download.csdn.net/detail/itas109/6855323 代码托管:https://code.csdn.net/itas109/cserialport 该串口类是用一个很好的串口类,希望对需要的人有所帮助


界面
