主题 : wince串口读线程 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 61496
精华: 0
发帖: 5
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2011-12-30
最后登录: 2013-04-15
楼主  发表于: 2012-02-17 15:10

 wince串口读线程

wince 下串口读线程,现在无法读到数据,求高手指点!谢谢,以下是代码!
//串口读线程
DWORD TML_Lib::CommRecvTread(LPVOID lparam)
{
    TML_Lib *pTML = (TML_Lib *)lparam;
    DWORD dwCommStatus = 0;
    BOOL bResult = FALSE;
    BOOL bClear = FALSE;
    BOOL bReadResult = FALSE;
    DWORD dwNumBytesRead = 0;
    COMSTAT comstat;
    DWORD dwError;
    char RXBuff;
    PurgeComm(pTML->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR |PURGE_RXABORT | PURGE_TXABORT);

    SetCommMask(pTML->m_hComm, EV_RXCHAR);
    
    while(1)
    {
        bResult = WaitCommEvent( pTML->m_hComm,  &dwCommStatus, NULL);

        if(bResult && (dwCommStatus&&EV_RXCHAR))// char arrived
        {
            memset(pTML->ReceiveBuf, 0, 512);
            pTML->m_iReadCounter=0;

            do
            {
                EnterCriticalSection(&pTML->m_cs); //now it is critical
                bClear = ClearCommError(pTML->m_hComm, &dwError, &comstat);

                if(comstat.cbInQue == 0) break;

                dwNumBytesRead = 0;
                RXBuff = 0;

                bReadResult = ReadFile(pTML->m_hComm, // HANDLE to Comm port
                                        &RXBuff,      //RX Buffer Pointer
                                        1,            //Read one byte
                                        &dwNumBytesRead, //store number of bytes read
                                        NULL);
                LeaveCriticalSection(&pTML->m_cs);

                if(bResult && dwNumBytesRead == 1)
                {
                    pTML->ReceiveBuf[pTML->m_iReadCounter++] = RXBuff;
                }
            }while(bReadResult && dwNumBytesRead == 1);
        }//
        if(WaitForSingleObject(pTML->m_ExitThreadEvent,500) == WAIT_OBJECT_0)//WAIT_TIMEOUT
        {
        break;            
        }
    }
    
    return 0;
}