2011-12-14 169 views
2

我正在通过连接COM端口RD和TD引脚来测试串行端口通信。 在执行下面的代码之前,COM端口已被初始化。ReadFile()返回空白数据

CString cs_Send = "F: 5000000 Hz, SF: 1.0, Phase: 10, Position: 50, on sample 1"; 

BOOL bWriteRC = false; 
BOOL bReadRC = false; 
DWORD iBytesWritten = 0; 
char readBuffer[256] = {"\0"}; 

DWORD read; 

bWriteRC = WriteFile(hPort,cs_Send.GetBuffer(10),cs_Send.GetLength(),&iBytesWritten,NULL); 
**Sleep(1000);// Thanks for the advice!!! this Sleep() will fix this error.** 
bReadRC = ReadFile(hPort,readBuffer,sizeof(readBuffer),&read,NULL); 

if(bWriteRC) 
{ 
    if(bReadRC) 
    { 
     AfxMessageBox(readBuffer, MB_OK); 
    } 
} 

bWriteRC和bReadRC总是返回true。但第一条消息是完全空白的。如果我运行这两次以上,第一次之后的每条消息与我发送的完全相同。我想知道为什么第一个总是空白。

回答

2

通常,WriteFileWriteFileEx函数会将数据写入内部缓冲区,操作系统会定期写入磁盘或通信管道。 FlushFileBuffers函数将指定文件的所有缓冲信息写入设备或管道。

拨打WriteFile后致电FlushFileBuffers

有关更多详细信息,请参见FlushFileBuffers

+0

它在WriteFile()之后不能与FlushFileBuffers(hPort)一起使用。 **第一条消息仍然是空白。** – user1098761 2011-12-14 22:13:51