关于读串口的问题,谢谢各位了

yifuzhiming 2014-03-12 12:36:40
GetOverlappedResult总是返回false,使用
dwError = GetLastError();
这里的错误总是返回317,请问是什么原因啊,只有在win7下的USB转串口才有这种问题,真的好郁闷,谢谢各位了


DWORD dwError = 0;
DWORD dwPos = 0 ,dwNumRead = 0;
DWORD dwTick = 0, dwNow = 0;
DWORD dwRet = 0;
COMSTAT comStat;
BOOL bRead = FALSE;
OVERLAPPED m_ov;
DWORD BytesRead = 0;
BOOL bResult = TRUE;

if(NULL == str || 0 >= len || 0 > iTimeOut)
{
//_snprintf(m_szErrorInfo, MAX_ERR_BUFF_LEN, "CAsyncCom::ReadComm invalide parameters");
//RET_LN()
return 0;
}

dwTick = GetTickCount();
while(1)
{
TRACE("while(1) inner\n");
Sleep(interval);
if (iTimeOut != 0)
{
dwNow = GetTickCount();
if((dwNow - dwTick) >= (DWORD)(iTimeOut))
{
//CComFun::WriteLog(0, "read serail port timeout!");
//return SERAIL_READ_TIME_OUT;
return 0;
}
}

ClearCommError(m_hComm, &dwError, &comStat);
if (comStat.cbInQue == 0)
{
if (bRead)
{
break;
}else{
TRACE("while(1) readfile comStat.cbInQue continue\n");
continue;
}
}

m_osRead.Offset = 0;
m_osRead.OffsetHigh = 0;
dwNumRead = min(len - dwPos, comStat.cbInQue);
TRACE("while(1) readfile\n");
bResult = ReadFile(m_hComm, str + dwPos, dwNumRead, &dwNumRead, &m_osRead);
if (!bResult) {

switch (dwError = GetLastError())
{
case ERROR_IO_PENDING://数据尚未读完
{
bRead = FALSE;
break;
}default:
{
break;
}
}
}else{
bRead = TRUE;
*retCount = dwNumRead;
}
if (!bRead)
{
bRead = TRUE;
bResult = GetOverlappedResult(m_hComm, // Handle to COMM port
&m_ov, // Overlapped structure
&BytesRead, // Stores number of bytes read
TRUE);
if (bResult == 0)
{
DWORD dwError = 0;
dwError = GetLastError();
int test = 123;
}
*retCount = BytesRead;
}
/*
if (bRet == TRUE)
{
bRead = TRUE;
dwPos += dwNumRead;
if (dwPos >= (DWORD)len)
{
break;
}else{
TRACE("while(1) readfile continue\n");
continue;
}
}*/

Sleep(interval);
TRACE("while(1) end\n");
}
*retCount = dwPos;
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcf_reader 2014-03-13
  • 打赏
  • 举报
回复
领分的来了。
numen27 2014-03-12
  • 打赏
  • 举报
回复
抢分啦!谢谢楼主!
worldy 2014-03-12
  • 打赏
  • 举报
回复
读出口还用OVERLAPPED?
yifuzhiming 2014-03-12
  • 打赏
  • 举报
回复
问题解决了啊,是个低级错误,来人领分啊

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧