请教,VC++ 串口编程问题。

串口收到数据后自动触发事件,这个该怎么实现呢,希望有好心人能给解释一下... 串口收到数据后自动触发事件,这个该怎么实现呢,希望有好心人能给解释一下 展开
 我来答
wrgljylys
2009-10-09 · TA获得超过389个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:160万
展开全部
如果你使用的是底层api的话

可以起一个新线程,用于监听串口
同时使用ClearCommError查询串口是否有数据到来

具体步骤如下:

1、创建一个异步读/写的串口

HANDLE m_hComm;
m_hComm=CreateFile( m_port, GENERIC_READ |GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED,NULL);

m_port为端口号
FILE_FLAG_OVERLAPPED是关键

2、配置串口:包括超时、DCB、读写缓冲区

3、启动新线程
CWinThread* m_pCommThread;
m_pCommThread=AfxBeginThread(ThreadComm,pInfo,THREAD_PRIORITY_NORMAL,0,0); //开启串口线程

ThreadComm为线程回调函数
pInfo 为封装有所有要向线程传递的参数的结构体(类)指针

4、在线程回调函数中
循环查询串口是否有数据到来
DWORD dwError //串口错误码
COMSTAT cs; //串口状态结构体
while(pDoc->IsSerailOpen() //串口处于打开状态下)
{
ClearCommError(hComm,&dwError,&cs);
//调用ClearCommError,如果串口有数据到来,即串口读缓冲区中有数据
//则串口读缓冲区中的数据长度将存入cs.cbInQue变量(unsigned long型)
//如串口读缓冲区中无数据,则cs.cbInQue为0
//对cs.cbInQue作判断即可得知串口是否收到数据。
if(cs.cbInQue)
{
//串口有数据到来,进行处理
//一般是通过发送自定义消息的方式,交由新的消息响应函数去处理
}
}

以上的代码是我曾经一个项目的部分代码,篇幅原因略去了一些代码
另外给你一个链接,你可以参考一下
http://hi.baidu.com/xtxycy/blog/item/66827a7766637813b051b9ee.html
BlueWanderer
2009-10-09 · TA获得超过9209个赞
知道大有可为答主
回答量:5673
采纳率:83%
帮助的人:2000万
展开全部
开一个线程专门读取
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1e944cd
2009-10-09 · TA获得超过989个赞
知道小有建树答主
回答量:255
采纳率:0%
帮助的人:316万
展开全部
利用mscomm控件,在其OnComm函数中进行响应
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萍水e相逢
2009-10-09 · TA获得超过3万个赞
知道大有可为答主
回答量:5.9万
采纳率:46%
帮助的人:1.4亿
展开全部
同意 2 楼的

利用mscomm控件,在其OnComm函数中进行响应

建议 看看 龚建伟 的 书,入门级 的 很不错 的

祝你顺利
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式