第一范文网 - 专业文章范例文档资料分享平台

MFC串口通信编程详解解析

来源:用户分享 时间:2025/9/15 18:40:51 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

果.例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING.这说明重叠操作还未完成.

下面是同步方式读写串口的示例: //同步读串口 char str[100];

DWORD wCount;//读取的字节数 BOOL bReadStat;

bReadStat=ReadFile(hCom,str,100,&wCount,NULL; if(!bReadStat {

MessageBox(\读串口失败!\return FALSE; }

return TRUE; //同步写串口 char lpOutBuffer[100]; DWORD dwBytesWrite=100; COMSTAT ComStat; DWORD dwErrorFlags;

BOOL bWriteStat;

ClearCommError(hCom,&dwErrorFlags,&ComStat;

bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,& dwBytesWrite,NULL; if(!bWriteStat

{

MessageBox(\写串口失败!\}

PurgeComm(hCom, PURGE_TXABORT|

PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR; 在重叠操作时,操作还未完成函数就返回.

重叠I/O非常灵活,它也可以实现阻塞(例如我们可以设置一定要读取到一个数据 才能进行到下一步操作.有两种方法可以等待操作完成:一种方法是用象 WaitForSingleObject这样的等待函数来等待OVERLAPPED结构的hEvent成员;另一种方法是调用GetOverlappedResult函数等待,后面将演示说明.

下面先简单介绍一下OVERLAPPED结构和GetOverlappedResult函数: OVERLAPPED结构

OVERLAPPED结构包含了重叠I/O的一些信息,定义如下: typedef struct _OVERLAPPED { DWORD Internal;

DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; HANDLE hEvent; } OVERLAPPED;

在使用ReadFile和WriteFile重叠操作时,线程需要创建OVERLAPPED结构以供这两个函数使用.线程通过OVERLAPPED结构获得当前的操作状态,该结构最重要的成

员是hEvent.hEvent是读写事件.当串口使用异步通讯时,函数返回时操作可能还没有完成,程序可以通过检查该事件得知是否读写完毕.

当调用ReadFile, WriteFile 函数的时候,该成员会自动被置为无信号状态;当重叠操作完成后,该成员变量会自动被置为有信号状态.

GetOverlappedResult函数 BOOL GetOverlappedResult( HANDLE hFile,//串口的句柄

//指向重叠操作开始时指定的OVERLAPPED结构 LPOVERLAPPED lpOverlapped,

//指向一个32位变量,该变量的值返回实际读写操作传输的字节数. LPDWORD lpNumberOfBytesTransferred,

//该参数用于指定函数是否一直等到重叠操作结束.

//如果该参数为TRUE,函数直到操作结束才返回.

//如果该参数为FALSE,函数直接返回,这时如果操作没有完成, //通过调用GetLastError(函数会返回ERROR_IO_INCOMPLETE. BOOL bWait ;

该函数返回重叠操作的结果,用来判断异步操作是否完成,它是通过判断OVERLAPPED结构中的hEvent是否被置位来实现的.

异步读串口的示例: char lpInBuffer[1024]; DWORD dwBytesRead=1024; COMSTAT ComStat; DWORD dwErrorFlags; OVERLAPPED m_osRead;

memset(&m_osRead,0,sizeof(OVERLAPPED;

m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL; ClearCommError(hCom,&dwErrorFlags,&ComStat;

dwBytesRead=min(dwBytesRead,(DWORDComStat.cbInQue; if(!dwBytesRead return FALSE;

搜索更多关于: MFC串口通信编程详解解析 的文档
MFC串口通信编程详解解析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c293et3n3e23bj0w6iip07zlrl1bkfq0131k_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top