明清宫廷玉香薰:错误: 997 重叠 I/O 操作在进行中。

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 08:01:15
错误: 997 重叠 I/O 操作在进行中。
这句话什么意思!?如何解决?

如果你使用的是重叠(异步)方式打开串口的话
出现这个错误很正常。表明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;
}
--------------------------------------------------------------------------------
操作还没有结束