ReadFile () возвращает пустые данные - PullRequest
2 голосов
/ 15 декабря 2011

Я тестирую связь через последовательный порт, соединяя выводы 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-го точно совпадает с тем, что я отправил.Интересно, почему первый всегда пуст?

1 Ответ

2 голосов
/ 15 декабря 2011

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

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

Подробнее см. FlushFileBuffers .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...