關(guān)于串口句柄的關(guān)閉,不知道大家有沒有解決辦法關(guān)于串口句柄的關(guān)閉,不知道大家有沒有解決方法 我使用串口與裝置進(jìn)行通訊,通訊過程中,突然裝置重啟,或與裝置之間的串口連接突然中斷 導(dǎo)致我的軟件無法在中斷連接之前關(guān)閉這個(gè)已經(jīng)打開的串口句柄,從而使我想再次打開該串口時(shí), 顯示該串口已經(jīng)被占用而無法打開。 不知道各位有沒有好的解決方案呀。。謝謝了 ------解決方案-------------------- 每次打開串口如果顯示被占用就進(jìn)行關(guān)閉,然后再次打開 ------解決方案-------------------- 打開之前做判斷。。。。。 ------解決方案-------------------- 突然中斷是可以檢測到的 我是這么做的 你參考一下
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);
}
}
}
編輯推薦最近更新
|
|
|