大家好,我做了一个小程序
当我拔掉串口线的时候,我想让界面的指示灯图片变成灰色
可是如何判断串口状态阿

解决方案 »

  1.   

    我是这么处理的
    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;
    }
    }
      

  2.   

    带都上了还要怎么详细呢?
    那我再多贴点吧
    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);
    }
    }
    }