2011-12-14 3 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를 반환합니다. 그러나 첫 번째 메시지는 완전히 비어 있습니다. 그리고 이것을 두 번 이상 실행하면 1 차 이후의 모든 메일은 내가 보낸 메일과 정확히 동일합니다. 첫 번째 것이 항상 비어있는 이유가 궁금합니다.

답변

2

일반적으로 WriteFileWriteFileEx 함수는 운영 체제가 디스크 또는 통신 파이프에 정기적으로 기록하는 내부 버퍼에 데이터를 씁니다. FlushFileBuffers 함수는 지정된 파일에 대한 모든 버퍼링 된 정보를 장치 나 파이프에 씁니다.

WriteFile으로 전화 한 후 FlushFileBuffers으로 전화하십시오.

자세한 내용은 FlushFileBuffers을 참조하십시오.

+0

WriteFile() 후에 FlushFileBuffers (hPort)에서 작동하지 않습니다. ** 첫 번째 메시지는 여전히 비어 있습니다. ** – user1098761

+0

'ReadFile'을 호출 한 후'read' 변수의 값은 무엇입니까? 그리고 어떻게'CreateFile'을 호출 했습니까? –

+0

''char csize [256] = { "\ 0"};을 추가 한 다음 ReadFile() 뒤에 itoa (read, csize, 10);를 추가하십시오. 첫 번째 값은 항상 0이고 다음에 오는 값은 모두 61입니다. CreateFile()은 잘 호출되며 테스트 전에 항상 초기화되었습니다. 1 Byte-wise 전송은 성공했으며 CString-wise 테스트를 완료하려고했습니다. – user1098761

관련 문제