VC用API函数实现串口通信的问题

我开始用阻塞式的可以通信,但是后来改成非阻塞式的就不可以了,具体改动是hcom=CreateFile("COM1",GENERIC_WRITE|GENERIC_READ,... 我开始用阻塞式的可以通信,但是后来改成非阻塞式的就不可以了,具体改动是
hcom=CreateFile("COM1",GENERIC_WRITE|GENERIC_READ,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
加上FILE_FLAG_OVERLAPPED,然后发送数据时这样
void CJustechView::OnWriteFile(CString str)
{
OVERLAPPED over;
over.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
WriteFile(hcom,str,10,NULL,&over);
}
结果就收不到数据了,是哪里出问题了?
展开
 我来答
百度网友39fe17c85c3
2013-04-10 · 超过34用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:80万
展开全部
{
OVERLAPPED over;
over.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
WriteFile(hcom,str,10,NULL,&over);
}

这里是有问题的,MSDN有很明确的说明,对于异步IO请求,数据缓冲区及OVERLAPPED结构在IO请求未完成期间是不能销毁的.而你在栈上分配的OVERLAPPED结构,出了右花括号便销毁了.
至于你这里是不是因为这个问题导致收不到数据,可以简单的测试下,在WriteFile后面加个WaitForSingleObject,等待事件对象.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式