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);
}
结果就收不到数据了,是哪里出问题了? 展开
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);
}
结果就收不到数据了,是哪里出问题了? 展开
1个回答
展开全部
{
OVERLAPPED over;
over.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
WriteFile(hcom,str,10,NULL,&over);
}
这里是有问题的,MSDN有很明确的说明,对于异步IO请求,数据缓冲区及OVERLAPPED结构在IO请求未完成期间是不能销毁的.而你在栈上分配的OVERLAPPED结构,出了右花括号便销毁了.
至于你这里是不是因为这个问题导致收不到数据,可以简单的测试下,在WriteFile后面加个WaitForSingleObject,等待事件对象.
OVERLAPPED over;
over.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
WriteFile(hcom,str,10,NULL,&over);
}
这里是有问题的,MSDN有很明确的说明,对于异步IO请求,数据缓冲区及OVERLAPPED结构在IO请求未完成期间是不能销毁的.而你在栈上分配的OVERLAPPED结构,出了右花括号便销毁了.
至于你这里是不是因为这个问题导致收不到数据,可以简单的测试下,在WriteFile后面加个WaitForSingleObject,等待事件对象.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询