比如对方发送一帧报文:11 22 33 44 55
而我的接收分成了3帧:
11
22 33
44 55
很烦人!我的设置为:
COMMTIMEOUTS  CommTimeOuts ;
CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 10;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts( m_hComDev, &CommTimeOuts );不知问题出在什么地方?请高手指点,谢谢!

解决方案 »

  1.   

    和SetCommTimeouts没有什么关系
    和你的SetMask()有关。设置了接收缓冲区几个字节达到会触发
      

  2.   

    if( SetCommState(m_hComDev,&dcb) ) 
    {
    SetCommMask( m_hComDev, EV_RXCHAR ) ;
    SetupComm( m_hComDev, RXQUEUE, TXQUEUE );
    PurgeComm( m_hComDev, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
    COMMTIMEOUTS  CommTimeOuts ; CommTimeOuts.ReadIntervalTimeout = MAXDWORD;
    CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
    CommTimeOuts.ReadTotalTimeoutConstant = 10;
    CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
    CommTimeOuts.WriteTotalTimeoutConstant = 0; SetCommTimeouts( m_hComDev, &CommTimeOuts ); m_bConnected = TRUE;
    if( m_pThread = AfxBeginThread(CommWatchThreadProc, (LPVOID)this ) ) //开始串口接收监视线程
    {
    EscapeCommFunction( m_hComDev, SETDTR );
    return 0;
    }
    }请问哪里有问题?谢谢
      

  3.   

    这些没有问题,WaitCommEvent()设置了EV_RXCHAR?
    你可以在触发后获取一下接收缓冲区内的字节数,没到规定字数就不处理。