出现错误997./重叠i/o怎么办

 我来答
福喜900
推荐于2016-09-01 · TA获得超过6.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:0%
帮助的人:1亿
展开全部
如果你使用的是重叠(异步)方式打开串口的话
出现这个错误很正常。表明I/O没有完成。但不表明串口操作有错误。
如果你使用同步方式打开串口的话,那就是有错误了。
因为同步方式是阻塞的,知道I/O完成才返回
--------------------------------------------------------------------------------
我的一段成功代码,供参考
//工作者线程pParam为可传递的参数本程序传递的是对话框指针
UINT CommProc(LPVOID pParam)
{
OVERLAPPED os;
DWORD dwMask, dwTrans;
DWORD m_TempErrorCode;
COMSTAT ComStat;
DWORD dwErrorFlags;
CComiotestDlg *pDoc=(CComiotestDlg*)pParam;
memset(&os,0,sizeof(OVERLAPPED));
os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);
if(os.hEvent==NULL)
{
AfxMessageBox("Can't create event object!");
return (UINT)-1;
}
while(pDoc->m_bConnect)
{
//通过清除COMM的错误获取通信状态主要是是否收到数据
ClearCommError(pDoc->hCom,&dwErrorFlags,&ComStat);
if(ComStat.cbInQue==12) //是否收到数据
{
// 无限等待WM_COMMNOTIFY消息被处理完
::WaitForSingleObject(pDoc->m_hPostMsgEvent,INFINITE);
//使pDoc->m_hPostMsgEvent消息为无信号的状态
ResetEvent(pDoc->m_hPostMsgEvent);
// 通知窗口消息
PostMessage(pDoc->m_hTermWnd, WM_COMMNOTIFY, EV_RXCHAR, 0);
continue;
}
dwMask=0;
if(!WaitCommEvent(pDoc->hCom, &dwMask, &os)) // 重叠操作
{
m_TempErrorCode=GetLastError();
if(m_TempErrorCode==ERROR_IO_PENDING)
// 无限等待重叠操作结果
GetOverlappedResult(pDoc->hCom,&os,&dwTrans,TRUE);
else
{
CloseHandle(os.hEvent);
return (UINT)-1;
}
}
}
CloseHandle(os.hEvent);
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式