串口通信中,读取串口收到的数据前使用PurgeComm函数,我的问题是如果使用PurgeComm函数,不是把收到的数据缓冲区中的数据清空,不是收不到数据了?请各位高人指点

解决方案 »

  1.   

    串口通信中,读取串口收到的数据前使用PurgeComm函数,我的问题是如果使用PurgeComm函数,不是把收到的数据缓冲区中的数据清空,不是收不到数据了?需要防止数据错位,数据都是流的方式来传输的,数据要对位,你再看看PurgeComm函数用在什么地方. 一般只初始化的时候用一下
      

  2.   

    The PurgeComm function can discard all characters from the output or input buffer of a specified communications resource. It can also terminate pending read or write operations on the resource. BOOL PurgeComm(
      HANDLE hFile,  // handle to communications resource
      DWORD dwFlags  // action to perform
    );
     
    Parameters
    hFile 
    Handle to the communications resource. The CreateFile function returns this handle. 
    dwFlags 
    Specifies the action to take. This parameter can be a combination of the following values: Value Meaning 
    PURGE_TXABORT Terminates all outstanding overlapped write operations and returns immediately, even if the write operations have not been completed. 
    PURGE_RXABORT Terminates all outstanding overlapped read operations and returns immediately, even if the read operations have not been completed. 
    PURGE_TXCLEAR Clears the output buffer (if the device driver has one). 
    PURGE_RXCLEAR Clears the input buffer (if the device driver has one). 
    Return Values
    If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError. Res
    If a thread uses PurgeComm to flush an output buffer, the deleted characters are not transmitted. To empty the output buffer while ensuring that the contents are transmitted, call the FlushFileBuffers function (a synchronous operation). Note, however, that FlushFileBuffers is subject to flow control but not to write time-outs, and it will not return until all pending write operations have been transmitted. 
      

  3.   

    PurgeComm 应该是在接收数据进入死循环之间,或者是输出数据之前才调用的。而读数据和写数据是不能同时进行的,不会出现你那种问题。
      

  4.   

    没错,pugeComm在接收之前,或关闭串口之后用