文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++深入浅出Win32多线程程序设计之综合实例
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
热点TOP10
·进程和线程编程
·C语言编程易犯毛病集合
·打字游戏
·Awk 基础入门:Awk 实例编程
·asp.net中调用javascript函数实现多功能日期控件示例
·C语言编程常见问题解答之常用函数的包含文件(1)
·C# GridView 排序及分页
·C #中的几个线程同步对象方法
·无废话C#设计模式之三:Abstract Factory
·C# DataGridView隔行显示不同的颜色

深入浅出Win32多线程程序设计之综合实例

日期:2008年6月6日 作者: 查看:[大字体 中字体 小字体]


 char ErrorChar; // error replacement character
 char EofChar; // end of input character
 char EvtChar; // received event character
 WORD wReserved1; // reserved; do not use
} DCB;
  读写串口

  在读写串口之前,还要用PurgeComm()函数清空缓冲区,并用SetCommMask ()函数设置事件掩模来监视指定通信端口上的事件,其原型为:

BOOL SetCommMask(
 HANDLE hFile, //标识通信端口的句柄
 DWORD dwEvtMask //能够使能的通信事件
);
  串口上可能发生的事件如下表所示:

值 事件描述 EV_BREAK A break was detected on input. EV_CTS The CTS (clear-to-send) signal changed state. EV_DSR The DSR(data-set-ready) signal changed state. EV_ERR A line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY. EV_RING A ring indicator was detected. EV_RLSD The RLSD (receive-line-signal-detect) signal changed state. EV_RXCHAR A character was received and placed in the input buffer. EV_RXFLAG The event character was received and placed in the input buffer. The event character is specified in the device's DCB structure, which is applied to a serial port by using the SetCommState function. EV_TXEMPTY The last character in the output buffer was sent.
  在设置好事件掩模后,我们就可以利用WaitCommEvent()函数来等待串口上发生事件,其函数原型为:

BOOL WaitCommEvent(
 HANDLE hFile, //标识通信端口的句柄
 LPDWORD lpEvtMask, //指向存放事件标识变量的指针
 LPOVERLAPPED lpOverlapped, // 指向overlapped结构
);
  我们可以在发生事件后,根据相应的事件类型,进行串口的读写操作:

BOOL ReadFile(HANDLE hFile, //标识通信端口的句柄
 LPVOID lpBuffer, //输入数据Buffer指针
 DWORD nNumberOfBytesToRead, // 需要读取的字节数
 LPDWORD lpNumberOfBytesRead, //实际读取的字节数指针
 LPOVERLAPPED lpOverlapped //指向overlapped结构
);
BOOL WriteFile(HANDLE hFile, //标识通信端口的句柄
 LPCVOID lpBuffer, //输出数据Buffer指针
 DWORD nNumberOfBytesToWrite, //需要写的字节数
 LPDWORD lpNumberOfBytesWritten, //实际写入的字节数指针
 LPOVERLAPPED lpOverlapped //指向overlapped结构
);
2.工程实例

  下面我们用第1节所述API实现一个多线程的串口通信程序。这个例子工程(工程名为MultiThreadCom)的界面很简单,如下图所示:

深入浅出Win32多线程程序设计之综合实例

  它是一个多线程的应用程序,包括两个工作者线程,分别处理串口1和串口2。为了简化问题,我们让连接两个串口的电缆只包含RX、TX两根连线(即不以硬件控制RS-232,串口上只会发生EV_TXEMPTY、EV_RXCHAR事件)。

  在工程实例的BOOL CMultiThreadComApp::InitInstance()函数中,启动并设置COM1和COM2,其源代码为:

BOOL CMultiThreadComApp::InitInstance()
{
 AfxEnableControlContainer();
 //打开并设置COM1
 hComm1=CreateFile("COM1", GENERIC_READGENERIC_WRITE, 0, NULL ,OPEN_EXISTING, 0,NULL);
 if (hComm1==(HANDLE)-1)
 {
  AfxMessageBox("打开COM1失败");

上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页 




上一篇:C++箴言:理解typename的两个含义

下一篇:C++箴言:谨慎使用多继承

相关文章:
·Photoshop CS3合成实例:人间天堂
·DataList嵌套实例
·Photoshop实例:制作超酷影片画面场景
·综合实例:PS洗衣粉包装设计印刷全攻略
·Photoshop精细抠像实例
·PS初学者实例教程 烫金字的制作
·进程和线程编程
·[综合交流]母矿、矿石、魔法石、召唤石的出处
·[综合]《武林外传》内测账号密码修改指南
·Flash动画制作实例:小野人玩摇滚
相关软件:
·C语言程序设计
·中文版Excel 2003实例与技巧
·CorelDraw12 入门与实例(图文教程 菜鸟先飞系列教材)
·AutoCAD2002入门与实例详解
·Windows环境下32位汇编语言程序设计
·Flash MX 动画制作实例教程
·注册表实例应用视频教程swf
·英语自考-综合英语(一)上册 - 第01讲(全16讲)
·PhotoShop7 设计百例 + 经典实例教程 + 滤镜教学
·AUTOCAD 2002机械设计应用与实例

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot