[email protected]
我也想要一份用API写的

解决方案 »

  1.   

    [email protected]
    我也想要一份用API写的
      

  2.   

    lpDCB->fInX = lpDCB->fOutX = lpDCB->fOutxDsrFlow = lpDCB->fOutxCtsFlow = FALSEbool CRawSerialPort::SetupDCB( LPCTSTR lpDef, LPDCB lpDCB )
    {
    memset( lpDCB, 0, sizeof(DCB) );
    bool bSet = false;

    lpDCB->BaudRate = CBR_57600 ;
    lpDCB->ByteSize = 8 ;
    lpDCB->Parity = NOPARITY ;
    lpDCB->StopBits = ONESTOPBIT ; lpDCB->fBinary = TRUE ;
    lpDCB->fParity = TRUE ;// setup software flow control
    // bSet = (BYTE) ((FLOWCTRL( npTTYInfo ) & FC_XONXOFF) != 0) ;// dcb.XonChar = ASCII_XON ;
    // dcb.XoffChar = ASCII_XOFF ;
    lpDCB->XonLim = 100 ;
    lpDCB->XoffLim = 100 ;

    // other various settings

    lpDCB->fInX = lpDCB->fOutX = bSet ;
    lpDCB->XonChar = 0 ;
    lpDCB->XoffChar = 0 ;

    // setup hardware flow control
    // bSet = (BYTE) ((FLOWCTRL( npTTYInfo ) & FC_DTRDSR) != 0) ;

    lpDCB->fOutxDsrFlow = bSet ;
    if (bSet)
    lpDCB->fDtrControl = DTR_CONTROL_HANDSHAKE ;
    else
    lpDCB->fDtrControl = DTR_CONTROL_ENABLE ;// bSet = (BYTE) ((FLOWCTRL( npTTYInfo ) & FC_RTSCTS) != 0) ;
    lpDCB->fOutxCtsFlow = bSet ;
    if (bSet)
    lpDCB->fRtsControl = RTS_CONTROL_HANDSHAKE ;
    else
    lpDCB->fRtsControl = RTS_CONTROL_ENABLE ; return true;
    }email:nec211218#yahoo.com
      

  3.   

    完全不用Timer,因为用了多线程,每个线程实际上都处于等待状态,来了数据立刻给主窗口发消息(PostMessage),数据被截断有可能是缓冲区太小,如果是发送的数据被截断,也有可能是连续两次发送命令之间的时间间隔太短。关于串口的程序,你可以去我主页看看,有一个例子,VC和BCB都可以用。也是用的多线程,但它在连续两次发送命令之间的时间间隔太短时会有问题。
    你可以研究一下。
      

  4.   

    没觉得串口这种设备也需要多线程,为什么不采用driver模式,所有的收发请求都由这个driver串行来完成,反正本来串口就不是什么并行设备,不容许你不同的数据同时发送,这样会混在一起的
      

  5.   

    解决了,我想主要的原因还是由于串口速度太慢,cpu读完了前几个字符,下面的字符还没上来,于是他就以为接受完了。把以后的字符作为下一批的了。
      

  6.   

    http://www.csdn.net/expert/topic/544/544226.xml