我正在通过将COM端口RD和TD引脚连接在一起来测试串行端口通信。
在执行以下代码之前,已初始化COM端口。
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。但是第一个消息是完全空白的。如果我运行两次以上,则1号后的每条消息都与我发送的消息完全相同。我不知道为什么第一个总是空白。
最佳答案
通常,WriteFile
和WriteFileEx
函数将数据写入内部缓冲区,操作系统定期将其写入磁盘或通信管道。 FlushFileBuffers
函数将指定文件的所有缓冲信息写入设备或管道。
在调用FlushFileBuffers
之后调用WriteFile
。
有关更多详细信息,请参见FlushFileBuffers。
关于c++ - ReadFile()返回空白数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8512301/