2011-12-14 4 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

Обычно функции WriteFile и WriteFileEx записывают данные во внутренний буфер, которые операционная система записывает на диск или канал связи на регулярной основе. Функция FlushFileBuffers записывает всю буферную информацию для указанного файла на устройство или трубу.

позвонить FlushFileBuffers после звонка WriteFile.

Для получения более подробной информации см. FlushFileBuffers.

+0

Он не работает с FlushFileBuffers (hPort) после WriteFile(). ** Первое сообщение все еще пусто. ** – user1098761

+0

Каково значение переменной 'read' после вызова' ReadFile'? И как вы назвали 'CreateFile'? –

+0

Я добавил 'char csize [256] = {" \ 0 "};' затем добавить 'itoa (read, csize, 10);' после ReadFile(). Первое значение всегда равно 0, а каждый следующий - 61. CreateFile() называется хорошо, и он всегда инициализировался перед тестированием. 1 Байт-мудрая передача прошла успешно, и я хотел завершить CString-wise test. – user1098761

Смежные вопросы