Помогите с функцией WaitCommEvent !!
От: Garilla  
Дата: 05.11.12 07:56
Оценка:
Не могу отловить событие, которое придет после опроса версии девайса (ShowSoftwareVersion)
Если отсоединить девайс от компьютера, то сообщение приходит.



// опрос версии, всё работает
void CTestOpt1004Dlg::OnBnClickedButtonStartstop()
{
    CString strLog;
    CString strCom("COM7");
    int iCom = 7;
    CStatic* log = (CStatic*) GetDlgItem(IDC_STATIC_LOG);

    strLog = strLog + "--Проверка " + strCom  + " \r\n";
    m_load.put_Comport(iCom);  
    m_load.put_IrDADevice(0); // NoneIrda device
    m_load.ShowSoftwareVersion();

    log->SetWindowText(strLog);
}

// поток для прослушки событий
UINT thread1(LPVOID pParam)
{
    CTestOpt1004Dlg* pDlg = (CTestOpt1004Dlg*)pParam;    
    ULONG lpEvtMask=0;        
    WaitCommEvent(pDlg->m_hCOM, &lpEvtMask, NULL);
    MessageBox(NULL,"Произошло событие","Info",MB_OK);
    
    return 0;
}


void CTestOpt1004Dlg::OnBnClickedButtonTest()
{
    CString strCom;
    strCom.Format("COM%d", 7);
    OVERLAPPED o;
    BOOL fSuccess;

    m_hCOM = CreateFile( strCom, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL );

    if (m_hCOM == INVALID_HANDLE_VALUE) 
    {
        return; 
    }
    DWORD mskValue = EV_RXCHAR | EV_RXFLAG |
            EV_TXEMPTY | EV_CTS | 
            EV_DSR | EV_RLSD | 
            EV_BREAK | EV_ERR | 
            EV_RING | EV_PERR;


    // устанавливаю флаги событий
    fSuccess = SetCommMask(m_hCOM, mskValue);

    if (!fSuccess) 
    {
        CloseHandle(m_hCOM);
        return;//continue без CloseHandle(hCom);
    }
    
    // запускаю поток, где будут перехватываться события
    AfxBeginThread(thread1,this);    

    // события опроса версии ТСД Опткон 1004
    m_load.put_Comport( 7 );  
    m_load.put_IrDADevice( 0 ); // NoneIrda device
    m_load.ShowSoftwareVersion();

}



05.11.12 15:26: Перенесено модератором из 'Железо' — AndrewVK
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.