//******************************************************************* BOOL OPort::Initialize( ) { CSLock temp( &lock ); if( hPort == NULL ) { hPort = CreateFile( name, GENERIC_READ | GENERIC_WRITE, 0, NULL, // security OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if( hPort == INVALID_HANDLE_VALUE ) { TRACE_MSG return FALSE; } reInitialize = TRUE; } if( reInitialize == FALSE ) return TRUE; DCB dcb; if( !GetCommState( hPort, &dcb ) ) { TRACE_MSG return FALSE; } dcb.BaudRate = baud; dcb.fBinary = TRUE; dcb.fParity = (parity==NOPARITY ? FALSE : TRUE); dcb.fNull = FALSE; dcb.ByteSize = (UCHAR)dataBits; dcb.Parity = (UCHAR)parity; dcb.fOutxCtsFlow = (flow==HARDWARE ? TRUE : FALSE); dcb.fRtsControl = (flow==HARDWARE ? RTS_CONTROL_HANDSHAKE : RTS_CONTROL_DISABLE); if( !SetCommState( hPort, &dcb ) ) { TRACE_MSG return FALSE; } reInitialize = FALSE; return TRUE; } 原来做工程都是用异步方式做的,需要考虑超时的问题,今天看了下一个modbus的代码,里面用的是同步方式