关于串口句柄的关闭,不知道大家有没有解决办法关于串口句柄的关闭,不知道大家有没有解决方法 我使用串口与装置进行通讯,通讯过程中,突然装置重启,或与装置之间的串口连接突然中断 导致我的软件无法在中断连接之前关闭这个已经打开的串口句柄,从而使我想再次打开该串口时, 显示该串口已经被占用而无法打开。 不知道各位有没有好的解决方案呀。。谢谢了 ------解决方案-------------------- 每次打开串口如果显示被占用就进行关闭,然后再次打开 ------解决方案-------------------- 打开之前做判断。。。。。 ------解决方案-------------------- 突然中断是可以检测到的 我是这么做的 你参考一下
void CWEComm::ThreadReceive(CWEComm* pOwner) { if(!SetCommMask(pOwner->m_hComm, EV_RXCHAR|EV_ERR)) return; COMSTAT statCom; DWORD dwError, dwLen, dwMask; while(pOwner->m_bIsRece && pOwner->IsOpen()) { dwMask = 0; if(!WaitCommEvent(pOwner->m_hComm, &dwMask, &pOwner->m_olWait)) { switch(GetLastError()) { case ERROR_ACCESS_DENIED: { pOwner->m_bIsRece = FALSE; pOwner->m_hThreadRec = NULL; SetCommMask(pOwner->m_hComm, 0); ResetEvent(pOwner->m_olWait.hEvent); CloseHandle(pOwner->m_hThreadRec); pOwner->Close(); }break; case ERROR_IO_PENDING:GetOverlappedResult(pOwner->m_hComm, &pOwner->m_olWait, &dwLen, true);break; } } if(dwMask & EV_ERR) ClearCommError(pOwner->m_hComm, &dwError, &statCom); if(dwMask & EV_RXCHAR) { ClearCommError(pOwner->m_hComm, &dwError, &statCom); if(statCom.cbInQue>0) ::SendMessage(pOwner->m_hNotifyWnd, pOwner->m_uMsgID, statCom.cbInQue, 0); } } } 编辑推荐 |
|
来自: 落水成花 > 《Windows API》