基于多线程技术和自定义消息编程实现Windows 9x异步串行通信
基于多线程技术和自定义消息编程实现Windows 9x异步串行通信 张志明 李蓉艳 王 磊 |
摘 要 分析了基于Windows 95/98平台上的异步串行通信程序开发方法,并结合开发实践,用C++Builder语言实现了基于多线程技术和消息响应机制的异步串行通信,给出编程的一般步骤和详细解释。 1 前言 串行通信具有连接简单、使用灵活方便、数据传递可靠等优点,在工业监控、数据采集和实时控制系统中得到了广泛应用。但由于Windows 95/98对系统底层操作采取了屏蔽的策略,不允许用户对硬件I/O口进行直接操作,进行串行通信只能通过调用API函数来完成;同时Windows 9x通过消息队列驱动管理程序,DOS中断服务例程在其下面也很难实现,且实时性和可靠性都得不到保证;通过基于线程和消息的多任务处理编程可以有效地解决这一问题,且能提高数据传输的吞吐量和应用程序的可靠性。 2 串行通信的基本编程 串行通信编程的基本流程如图1所示,首先调用API函数CreateFile( )打开并初始化需要操作的串行端口:
图1串行通信编成的基本流程 HANDLE CreateFile (LPCTSTR lpFileName, 3 C++ Builder 3.0/4.0 对多线程编程的支持 (1)直接使用Win32 SDK中提供的API函数。如CreateThread,SetThreadPriority,ResumeThread,ExitThread等函数,编程较复杂,编程工作量大。 4 多线程编程实现异步串行通信 利用Windows 9x的多线程编程技术,编程创建辅助线程实时监视串口通信状态,并由串口通信监视线程根据通信状态向主线程发送相应的消息,由主线程分析处理。多线程串行通信法的最大优点是程序对接收数据具有自主觉察能力,一旦辅助的通信监视线程查询到数据已经发送到串行口上,辅助线程自动接收数据后,向主线程发送数据接收到的消息,应用程序可根据该消息来处理通信串口传送过来的数据,并且采用通信监视线程还不占用CPU时间。
针对串行通信的特点,采用事件(Event)对象和临界区(CriticalSection)对象来同步串行通信中各线程对通信端口和存储区数据的访问,避免引起多线程间的冲突和死锁。事件对象的作用是告诉其它线程发生了某一特定事件。相关的API函数有CreateEvent( )创建事件对象,调用成功后用SetEvent( )和ResetEvent( )手工重置事件对象状态,CloseHandle( )解除事件对象;WaitForSingleObject( )和WaitForMultipleObjects( )函数分别等待一个或多个特定事件的发生。临界区对象的作用是保护主线程与读/写线程之间的共享数据,一次只允许一个线程有权访问被保护的数据。InitializeCriticalSection( )初始化临界区对象,DeleteCriticalSection( )删除临界区对象并释放其所占内存,EnterCriticalSection( )和LeaveCriticalSection( )分别是进入和退出数据保护状态。 5 结束语 本文已成功地应用于智能大厦监控系统电子密码门锁网络监控分系统的实践中。实践证明,多线程编程实现串行通信对于近距离的RS232接口通信和远距离的RS485接口通信都能取得良好的效果。 张志明(西北工业大学电子信息工程学院 西安 710072) 参考文献 1,郝 杰, 崔晓东, 龚 惠等译. BORLAND C++ BUILDER编程指南. 北京: 电子工业出版社, 1998 |
基于多线程技术和自定义消息编程实现Windows 9x异步串行通信相关推荐
- mfc多线程编程实例_多线程技术的PLC与PC的通讯方式
点击箭头处"工业之家",选择"关注公众号"! 基于多线程技术的PLC与PC的通讯方式 1.系统构成 推进系统中,PC机选用工控计算机.它是整个控制系统的核心, ...
- 计算机网络多线程通信,多线程技术的PLC与PC的通讯方式
基于多线程技术的PLC与PC的通讯方式 1.系统构成 推进系统中,PC机选用工控计算机.它是整个控制系统的核心,是上位机.其主要利用良好的图形用户界面,显示从PLC接收的开关量和控制手柄的位置,进行一 ...
- LabWindows™/CVI中的多线程技术
目录(?)[+] http://zone.ni.com/devzone/cda/tut/p/id/6943#toc3 LabWindows™/CVI中的多线程技术 2 ratings | 2.50 o ...
- LabWindows™/CVI中的多线程技术【转】
http://zone.ni.com/devzone/cda/tut/p/id/6943#toc3 LabWindows™/CVI中的多线程技术 2 ratings | 2.50 out of 5 R ...
- Windows并发异步编程(1)JAVA多线程
本文在基于C/C++/Windows相关知识的基础上,初步封装一个像JAVA一样的多线程类–Win32Thread.使操作线程能像JAVA一样两步搞定: 继承基类Win32Thread,并覆盖其中的r ...
- 模拟QQ软件的基于多线程的流媒体加密传输软件技术
模拟QQ软件的基于多线程的流媒体加密传输软件技术 模拟QQ软件,基于多线程编程捕捉摄像头及麦克风实时数据,基于socket通信设计发送端.接收端两个部分的,对音频和视频进行采集.加密或加水印.传输.解 ...
- 简易 IM 双向通信电脑端 GUI 应用——基于 Netty、WebSocket、JavaFX 、多线程技术等
简易 IM 双向通信电脑端 GUI 应用--基于 Netty.WebSocket.JavaFX .多线程技术等 说明 运行效果 核心代码 完整代码 参考知识 说明 这是一款使用 Netty 来实现 ...
- 简易 IM 双向通信电脑端 GUI 应用——基于 Netty、JavaFX、多线程技术等
简易 IM 双向通信电脑端 GUI 应用--基于 Netty.JavaFX.多线程技术等 说明 运行效果 核心代码 完整代码 参考知识 说明 这是一个使用 Netty 来实现 IM 双向通信的 d ...
- JAVA物联所需技术_基于JAVA多线程技术解决物联云端服务雪崩效应的方法与流程...
本发明涉及互联网技术领域,特别涉及一种基于JAVA多线程技术解决物联云端服务雪崩效应的方法. 背景技术: 目前,物联云系统已经作为普遍的智能电视平台出现在我们面前,而细致分析物联云系统我们可以发现,当 ...
最新文章
- Python:KNN
- 《MySQL技术内幕:InnoDB存储引擎第2版》——3.1 参数文件
- java 回调(callback)函数简介.
- vba单元格批量赋值,EXCEL——VBA对文件夹下所有表格的特定单元格赋值
- Oracle_双机备份_资料
- Spring再次涵盖了您:继续进行消费者驱动的消息传递合同测试
- [003]容器和动态数组的使用
- java sort 第二个参数_详解java Collections.sort的两种用法
- SqlServer查询语句中用到的锁
- 获取GridView中RowCommand的当前索引行
- java ssm框架做增删改查,使用SSM框架组合实现增删改查的功能
- EXCHANGE虚拟目录功能介绍
- [轉]解决Windows XP下缩略图显示模式下文件夹没有名称的方法
- manjaro 安装mysql_manjaro安装mysql5.7
- MySQL MVCC原理
- 初探内联方式的 onload=doSomething()为何要加()?而js代码的 onload=doSomething 和 addEventListener 为何不加()?...
- 深入浅出python系列(二):运算符
- 如何使用Frontline实时抓取蓝牙协议栈HCI LOG
- 怎样用计算机粉碎文件夹,电脑粉碎文件用什么软件好,怎么彻底粉碎电脑文件...
- 华为手机怎么修改dns服务器,华为域名解析修改dns
热门文章
- nodejs addon binding osg
- 免费屏幕录制程序都不用
- 微信服务器 移动信号,微信消息延迟,只需更改手机这5个设置,效果“立竿见影”...
- java操作excel表
- 1937 年阿尔法罗密欧 8C 2900B Berlinetta获选成为全球最负盛名的车辆
- 微信消息记录导出并制作图云(安卓版)
- esp32c3 nvs存取大数组结构体方法
- 同轴电缆抗干扰措施(二)
- 计算机考研就业率,21考研同学需谨慎,三个专业就业率持续走低,包括热门计算机专业...
- 机器学习可行性与VC dimension